https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115527
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to qinzhao from comment #6) > --- a/gcc/gimple-fold.cc > +++ b/gcc/gimple-fold.cc > @@ -4815,6 +4815,7 @@ clear_padding_type (clear_padding_struct *buf, tree > type, > unsigned int prev_align = buf->align; > HOST_WIDE_INT off = buf->off + buf->size; > HOST_WIDE_INT prev_sz = buf->sz; > + HOST_WIDE_INT prev_size = buf->size; > clear_padding_flush (buf, true); > tree elttype = TREE_TYPE (type); > buf->base = create_tmp_var (build_pointer_type (elttype)); > @@ -4835,8 +4836,8 @@ clear_padding_type (clear_padding_struct *buf, tree > type, > buf->base = base; > buf->sz = prev_sz; > buf->align = prev_align; > - buf->size = off % UNITS_PER_WORD; > - buf->off = off - buf->size; > + buf->size = prev_size + nelts * fldsz; > + buf->off = 0; > memset (buf->buf, 0, buf->size); > break; > } That is incorrect. I think the right fix is --- gcc/gimple-fold.cc.jj 2024-07-16 13:36:36.000000000 +0200 +++ gcc/gimple-fold.cc 2024-07-16 15:50:26.493782065 +0200 @@ -4832,6 +4832,7 @@ clear_padding_type (clear_padding_struct buf->off = 0; buf->size = 0; clear_padding_emit_loop (buf, elttype, end, for_auto_init); + off += sz; buf->base = base; buf->sz = prev_sz; buf->align = prev_align; Will try to test it soon.