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.