https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115527
--- Comment #9 from qinzhao at gcc dot gnu.org --- (In reply to Jakub Jelinek from comment #8) > (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. Yes, this fix is better, and the testing case run correctly.