On Thu, 2017-12-14 at 16:07 -0700, Martin Sebor wrote:
> On 12/14/2017 12:24 PM, Jeff Law wrote:
> > On 12/11/2017 03:18 PM, Martin Sebor wrote:
> > > On 12/11/2017 02:08 PM, David Malcolm wrote:
> > > > On Mon, 2017-12-11 at 09:51 -0700, Martin Sebor wrote:
> > > > > Bug 83369 - Missing diagnostics during inlining, notes that
> > > > > when
> > > > > -Wnonnull is issued for an inlined call to a built-in
> > > > > function,
> > > > > GCC doesn't print the inlining stack, making it hard to debug
> > > > > where the problem comes from.
> > > > > 
> > > > > When the -Wnonnull warning was introduced into the middle-end
> > > > > the diagnostic machinery provided no way to print the
> > > > > inlining
> > > > > stack (analogous to %K for trees).  Since then GCC has gained
> > > > > support for the %G directive which does just that.  The
> > > > > attached
> > > > > patch makes use of the directive to print the inlining
> > > > > context
> > > > > for -Wnonnull.
> > > > > 
> > > > > The patch doesn't include a test because the DejaGnu
> > > > > framework
> > > > > provides no mechanism to validate this part of GCC output
> > > > > (see
> > > > > also bug 83336).
> > > > > 
> > > > > Tested on x86_64-linux with no regressions.
> > > > > 
> > > > > Martin
> > > > 
> > > > I'm wondering if we should eliminate %K and %G altogether, and
> > > > make
> > > > tree-diagnostic.c and friends automatically print the inlining
> > > > stack
> > > > -they just need a location_t (the issue is with system headers,
> > > > I
> > > > suppose, but maybe we can just make that smarter: perhaps only
> > > > suppress
> > > > if every location in the chain is in a system header?).  I
> > > > wonder if
> > > > that would be GCC 9 material at this point though?
> > > 
> > > Getting rid of %G and %K sounds fine to me.  I can't think of
> > > a use case for suppressing middle end diagnostics in system
> > > headers so unless someone else can it might be a non-issue.
> > > Since the change would fix a known bug it seems to me that it
> > > should be acceptable even at this stage.
> > 
> > My recollection is we suppress warnings from bits in system headers
> > because neither we nor the end users necessarily have control over
> > the
> > contents of the system headers -- in which case we'd be issuing
> > warnings
> > for something that only the vendor can fix.
> > 
> > 
> > I believe default suppression of warnings from system headers
> > probably
> > needs to stay.
> 
> I agree. I wasn't suggesting to get rid of -Wsystem altogether.
> Rather, I meant that unlike front-end warnings, I don't know
> and can't think of middle-end warnings (and only those) that
> should be suppressed for system header code.   They indicate
> bugs in the emitted and (in most cases) reachable object code.
> There should be no such code in system headers, and the middle
> end warnings I've worked on go out of their way to make sure
> they are emitted regardless.  (It's easy to forget this part
> and end up with Glibc macros like strncpy suppressing warnings
> for serious bugs in user code.)
> 
>  > Is there any kind of consensus on what we want to do here -- do we
> want
>  > to try to tackle %G/%K removal for gcc-8 or defer it?  If we defer
> it,
>  > how do we want to handle printing the inline stack in the interm?
> 
> I would support it but I don't expect to have the cycles to
> do the work myself at this stage.  I view it as a nice design
> improvement but give its minimal impact on functionality (IIUC)
> it's lower priority than the bugs I'd like to fix. 

Yes.  The %K and %G feel a design wart to me, but doing it right is
fiddly, and I think something to punt to gcc 9.

> I don't
> have the impression that improving the detail included in
> the inlining stack is predicated on this API change, but I'll
> let David speak to that.

The patch is fine; I'd just prefer it if there was a test case.  I
think you can reuse the approach used by gcc.dg/tm/pr52141.c, which has
just a:

  /* { dg-message "inlined from \'f\'" "" { target *-*-* } 0 } */

to verify that *something* was printed about the inlining, without
overspecifying exactly what.

Dave

Reply via email to