[C++ PATCH] Avoid ICE due to the attribute exclusion additions (PR c++/83322)

Jakub Jelinek jakub@redhat.com
Tue Dec 12 20:03:00 GMT 2017


On Tue, Dec 12, 2017 at 12:55:29PM -0700, Martin Sebor wrote:
> On 12/12/2017 12:01 PM, Jakub Jelinek wrote:
> > Hi!
> > 
> > This patch avoids ICEs when last_decl isn't a decl.
> > 
> > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
> > 
> > Though, I believe it would be better to do the attribute exclusions check
> > in duplicate_decls instead if the attributes don't appear together already
> > on a single decl, instead of trying to do another lookup.  I've filed a PR
> > where it makes a difference.
> 
> The reason for implementing attribute checking in the middle-end
> is so that it can be done consistently across all front-ends and
> back-ends, without back-end maintainers having to change the front
> end code, and so that conflicting attributes can be dropped before
> they are applied.  I went into more detail in my reply to Jason
> here:
> 
>   https://gcc.gnu.org/ml/gcc-patches/2017-08/msg01371.html
> 
> I'm just starting to look into the bug you filed (83394) but from
> what I've seen so far it seems to be a problem with calling
> lookup_name() to find the already declared class member conversion
> operator.  I'm sure there's a way to look it up and fix the bug
> without changing the fundamental design of the improvement.

Then you need to duplicate the name lookup, which is quite complicated
and compile time expensive.  Especially in C++, there are too many ways
how attributes can be introduced, e.g. on templates (including late vs.
early attributes), their specializations etc., so I doubt a simple
lookup_name can do what the callers of duplicate_decls do.

	Jakub



More information about the Gcc-patches mailing list