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