On Thu, 24 Feb 2022, Jakub Jelinek wrote:

> On Thu, Feb 24, 2022 at 02:30:05PM +0000, Qing Zhao wrote:
> >     PR middle-end/104550
> > 
> > gcc/ChangeLog:
> > 
> >     * gimple-fold.cc (clear_padding_flush): Suppress warnings for new
> >     created uses.
> > 
> > gcc/testsuite/ChangeLog:
> > 
> >     * gcc.dg/auto-init-pr104550-1.c: New test.
> >     * gcc.dg/auto-init-pr104550-2.c: New test.
> >     * gcc.dg/auto-init-pr104550-3.c: New test.
> > ---
> >  gcc/gimple-fold.cc                          |  7 ++++++-
> >  gcc/testsuite/gcc.dg/auto-init-pr104550-1.c | 10 ++++++++++
> >  gcc/testsuite/gcc.dg/auto-init-pr104550-2.c | 11 +++++++++++
> >  gcc/testsuite/gcc.dg/auto-init-pr104550-3.c | 11 +++++++++++
> >  4 files changed, 38 insertions(+), 1 deletion(-)
> >  create mode 100644 gcc/testsuite/gcc.dg/auto-init-pr104550-1.c
> >  create mode 100644 gcc/testsuite/gcc.dg/auto-init-pr104550-2.c
> >  create mode 100644 gcc/testsuite/gcc.dg/auto-init-pr104550-3.c
> > 
> > diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
> > index 16f02c2d098..e11a775ad9f 100644
> > --- a/gcc/gimple-fold.cc
> > +++ b/gcc/gimple-fold.cc
> > @@ -4379,7 +4379,12 @@ clear_padding_flush (clear_padding_struct *buf, bool 
> > full)
> >           else
> >             {
> >               src = make_ssa_name (type);
> > -             g = gimple_build_assign (src, unshare_expr (dst));
> > +             tree tmp_dst = unshare_expr (dst);
> > +             /* The folding introduces a read from the tmp_dst, we should
> > +                prevent uninitialized warning analysis from issuing warning
> > +                for such fake read.  */
> > +             suppress_warning (tmp_dst, OPT_Wuninitialized);
> 
> I wonder if we shouldn't guard the suppress_warning call on
>                 if (warn_uninitialized || warn_maybe_uninitialized)
> because those warnings aren't on by default and the suppress_warning stuff,
> especially when it could be done for many loads from the builtin means
> populating hash tables with those.

Maybe that's something suppress_warning should do then?  OTOH you
don't know whether you're suppressing a warning in a region with
-Wno-uninitialized but that's inlined into a -Wuninitialized
function where then the false diagnostic pops up if we didn't
suppress the warning ...

So yeah, I think LTGM.

Richard.

Reply via email to