On Fri, May 31, 2019 at 06:25:03PM +0200, Jakub Jelinek wrote:
> On Fri, May 31, 2019 at 12:16:58PM -0400, Marek Polacek wrote:
> > > The warning is not meant to diagnose these. But I do agree that the
> > > documentation for the new warning should be improved.
> >
> > I was partially wrong: if i/j are at file scope, then the warning triggers.
> > But if i/j are in a function, then it doesn't warn.
>
> That is correct, because the block scope statics aren't actually initialized
> from a global constructor, but with a guard variable whenever a function is
> called the first time. So on
> int bar ();
> struct S { S (); ~S (); };
>
> void
> foo ()
> {
> static int a = bar ();
> static S s;
> }
> this warning shouldn't warn at all. It might be useful to have another
> warning for these, but it should be a different warning.
Right, agreed -- and the patch already does the right thing.
Marek