On Tue, 2020-06-30 at 10:12 -0600, Martin Sebor wrote:
> On 6/30/20 8:47 AM, David Edelsohn via Gcc-patches wrote:
> > The unexpected warning is
> > 
> > gcc/testsuite/g++.dg/analyzer/pr94028.C:28:21: warning: use of
> > possibly-NULL '<unknown>' where non-null expected [CWE-690]
> > [-Wanalyzer-possible-null-argument]
> > 
> > This is the same location as one of the existing "leak" warnings.
> 
> I'm surprised that the Wnonull change triggers
> a -Wanalyzer-possible-null-argument warning.  There is no
> -Wnonnull for the test case with or without -fanalyzer (and
> with or without optimization) so that suggests the two are
> independent of one another.
> 
> I'm also not sure I see a justification for a nonnull warning
> in the test.  The note printed after the warning says:
> 
>      |      |                     (5) possible return of NULL to ‘f’ 
> from ‘j::operator new’
>      |      |                     (6) argument 1 (‘<unknown>’) from
> (4) 
> could be NULL where non-null expected
>      |
> /src/gcc/master/gcc/testsuite/g++.dg/analyzer/pr94028.C:19:3: note: 
> argument 1 of ‘j::j(B*, int)’ must be non-null
>     19 |   j (B *, int)
>        |   ^
> 
> but the first argument in j::j(B*, int) is not marked nonnull,
> and it's not the this pointer (treating those as implicitly
> nonnull was one of the changes introduced by my patch).

Are you sure it's not the "this" pointer?  Bear in mind that the C++
"support" in the analyzer is practically non-existent; I haven't yet
implemented any special-casing about how arguments are numbered, so it
could well be the "this" pointer.

If it is a complaint about the "this" pointer, that could explain why
this started happening when your patch went in.

Dave

> 
> FWIW, I don't remember if I saw it when going through the test
> results for my patch but if I did, it's possible that I assumed
> it was unrelated because of the -Wanalyzer- option.  Sorry if
> this was the wrong call.
> 
> Martin

> > How would you like pr94028.C to be adjusted in the testsuite to
> > account for this?
> > 
> > Thanks, David
> > 
> > On Tue, Jun 30, 2020 at 10:18 AM David Malcolm <dmalc...@redhat.com
> > > wrote:
> > > On Tue, 2020-06-30 at 09:51 -0400, David Edelsohn wrote:
> > > > The changes to the non-null warning now produce an additional
> > > > warning
> > > > for analyzer/pr94028.C on one of the "leak" lines.  This causes
> > > > new
> > > > failures on trunk.
> > > 
> > > Hi David
> > > 
> > > Do you have the output to hand?  What is the full text of the new
> > > diagnostic?
> > > 
> > > Some high level questions:
> > >    * Ought GCC to warn for that code?  (or not)
> > >    * Is it behavior we ought to have a test for?
> > > 
> > > Note that AFAIK there are *two* kinds of non-null warnings that
> > > GCC can
> > > emit: the kind emitted by Martin's code, versus those emitted by
> > > -fanalyzer (the latter imply the much more expensive analysis
> > > performed
> > > by -fanalyzer, and are controlled by the various -Wanalyzer-
> > > *null*
> > > options; see
> > > https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html
> > > )
> > > 
> > > 
> > > > Because non-null is not the purpose of the analyzer test, I
> > > > propose
> > > > pruning the output to resolve the new failures.
> > > 
> > > Looking back through bugzilla, it seems that the main purpose of
> > > adding
> > > that test was to ensure that -fanalyzer doesn't ICE on that code.
> > > 
> > > At some point I hope to properly support C++ in -fanalyzer, at
> > > which
> > > point some kind of null warning may be warranted on that
> > > code.  Sadly
> > > I'm not yet at that point.  FWIW I'm currently working on a big
> > > rewrite
> > > of how state is tracked within the analyzer, as I've identified
> > > at
> > > least two major flaws in the current implementation, which my
> > > rewrite
> > > addresses.  I'm deferring on C++ support until that rewrite is
> > > done.
> > > 
> > > >    Alternatively, I
> > > > could explicitly test for the additional non-null warning.
> > > > 
> > > > Do you have any preferences?
> > > 
> > > This test is controlled by analyzer.exp and thus, for example, is
> > > disabled if the analyzer was disabled at configure time.
> > > 
> > > If this is coming from Martin's non-analyzer code, a third
> > > possibility
> > > would be to use -Wno-something to disable that warning, so that
> > > the
> > > analyzer test can focus on the -fanalyzer test, as it were (and
> > > if this
> > > is a behavior that ought to be checked for in Martin's warning,
> > > then
> > > copy the pertinent fragment of the testcase to one of the g++.dg
> > > cases,
> > > I suppose).  I think I prefer that approach.
> > > 
> > > How does this sound?
> > > 
> > > > I propose appending
> > > > 
> > > > // { dg-prune-output "where non-null expected" }
> > > > 
> > > > to the file to prune the warning output.
> > > > 
> > > > Thanks, David
> > > 
> > > Thanks for looking into this; hope this is constructive.
> > > Dave
> > > 

Reply via email to