On Thu, Jan 09, 2025 at 12:05:43PM -0500, Patrick Palka wrote:
> On Wed, 8 Jan 2025, Jason Merrill wrote:
> 
> > On 12/21/24 11:35 AM, Simon Martin wrote:
> > > When erroring out due to an incomplete type, we add a contextual note
> > > about the type. However, when the error is suppressed by
> > > -Wno-template-body, the note remains, making the compiler output quite
> > > puzzling.
> > > 
> > > This patch makes sure the note is suppressed if we're processing a
> > > template declaration body with -Wno-template-body.
> > > 
> > > Successfully tested on x86_64-pc-linux-gnu.
> > > 
> > >   PR c++/118163
> > > 
> > > gcc/cp/ChangeLog:
> > > 
> > >   * cp-tree.h (get_current_template): Declare.
> > >   * error.cc (get_current_template): Make non static.
> > >   * typeck2.cc (cxx_incomplete_type_inform): Suppress note when
> > >   parsing a template declaration with -Wno-template-body.
> > 
> > I think rather than adding this sort of thing in lots of places where an 
> > error
> > is followed by an inform, we should change error to return bool like other
> > diagnostic functions, and check its return value before calling
> > cxx_incomplete_type_inform or plain inform.  This likely involves the same
> > number of changes, but they should be smaller.
> > 
> > Patrick, what do you think?
> 
> That makes sense to me, it's consistent with the 'warning' API and how
> we handle issuing a warning followed by a note.  But since the
> -Wtemplate-body mechanism is really only useful for compiling legacy
> code where you don't really care about any diagnostics anyway, and
> the intended way to use it is -fpermissive / -Wno-error=template-body
> rather than -Wno-template-body, I'd prefer a less invasive solution that
> doesn't change the API of 'error' if possible.
> 
> I wonder if we can work around this by taking advantage of the fact that
> notes that follow an error are expected to be linked via an active
> auto_diagnostic_group?  Roughly, if we issued a -Wtemplate-body
> diagnostic from an active auto_diagnostic_group then all other
> diagnostics from that auto_diagnostic_group should also be associated
> with -Wtemplate-body, including notes.  That way -Wno-template-body will
> effectively suppress subsequent notes followed by an eligible error, and
> no 'error' callers need to be changed (unless to use
> auto_diagnostic_group).

FWIW, I love this auto_diagnostic_group idea.

Marek

Reply via email to