[Bug middle-end/115527] incorrect folding of __builtin_clear_padding()
qinzhao at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jul 16 14:11:43 GMT 2024
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.
More information about the Gcc-bugs
mailing list