Hi Richard, I tested your fix for the patch with ubsan stage-1 built gcc, and it fixes the error. Is it OK to commit if bootstrap+test passes on x86_64-unknown-linux-gnu ?
Thanks, Prathamesh
2016-12-01 Richard Biener <rguent...@suse.de> Prathamesh Kulkarni <prathamesh.kulka...@linaro.org> PR middle-end/78629 * vec.h (vec<T, A, vl_embed>::quick_grow_cleared): Guard call to memset if len-oldlen != 0. (vec<T, va_heap, vl_ptr>::safe_grow_cleared): Likewise. diff --git a/gcc/vec.h b/gcc/vec.h index 14fb2a6..aa93411 100644 --- a/gcc/vec.h +++ b/gcc/vec.h @@ -1092,8 +1092,10 @@ inline void vec<T, A, vl_embed>::quick_grow_cleared (unsigned len) { unsigned oldlen = length (); + size_t sz = sizeof (T) * (len - oldlen); quick_grow (len); - memset (&(address ()[oldlen]), 0, sizeof (T) * (len - oldlen)); + if (sz != 0) + memset (&(address ()[oldlen]), 0, sz); } @@ -1605,8 +1607,10 @@ inline void vec<T, va_heap, vl_ptr>::safe_grow_cleared (unsigned len MEM_STAT_DECL) { unsigned oldlen = length (); + size_t sz = sizeof (T) * (len - oldlen); safe_grow (len PASS_MEM_STAT); - memset (&(address ()[oldlen]), 0, sizeof (T) * (len - oldlen)); + if (sz != 0) + memset (&(address ()[oldlen]), 0, sz); }