[Bug c++/81640] [8 Regression] ICE in lookup_fnfields_slot_nolazy w/ -Wshadow=compatible-local
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Aug 1 09:56:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81640
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The problem is that:
if (MAYBE_CLASS_TYPE_P (totype))
/* Use lookup_fnfields_slot instead of lookup_fnfields to avoid
creating a garbage BASELINK; constructors can't be inherited.
*/
ctors = lookup_fnfields_slot (totype, complete_ctor_identifier);
calls lookup_fnfields_slot with just MAYBE_CLASS_TYPE_P, not CLASS_TYPE_P, but
lookup_fnfields_slot does complete_type, so perhaps that is fine.
Unfortunately the r250440 commit removed the
if (!CLASS_TYPE_P (type))
return -1;
part from lookup_fnfields_slot_nolazy that made this work before.
So either we should readd it there (in the form of if (!CLASS_TYPE_P (type))
return NULL_TREE; ), or not call lookup_fnfields_slot_nolazy from
lookup_fnfields_slot like:
- return lookup_fnfields_slot_nolazy (type, name);
+ if (CLASS_TYPE_P (type))
+ return lookup_fnfields_slot_nolazy (type, name);
+ return NULL_TREE;
(seems other lookup_fnfields_slot_nolazy callers should likely ensure that it
is a CLASS_TYPE_P, either explicitly, or through using types from binfo
accessors).
More information about the Gcc-bugs
mailing list