[Bug lto/65475] [5 Regression] ICE in odr_vtable_hasher::equal (Segmentation fault)
hubicka at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Mar 20 08:29:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65475
--- Comment #3 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
The following should help:
Index: ipa-devirt.c
===================================================================
--- ipa-devirt.c (revision 221528)
+++ ipa-devirt.c (working copy)
@@ -1412,9 +1412,18 @@ add_type_duplicate (odr_type val, tree t
if (!val->types_set)
val->types_set = new hash_set<tree>;
+ /* Chose polymorphic type as leader (this happens only in case of ODR
+ violations. */
+ if ((TREE_CODE (type) == RECORD_TYPE && TYPE_BINFO (type)
+ && polymorphic_type_binfo_p (TYPE_BINFO (type)))
+ && (TREE_CODE (val->type) != RECORD_TYPE || !TYPE_BINFO (val->type)
+ || !polymorphic_type_binfo_p (TYPE_BINFO (val->type))))
+ {
+ prevail = true;
+ build_bases = true;
+ }
/* Always prefer complete type to be the leader. */
-
- if (!COMPLETE_TYPE_P (val->type) && COMPLETE_TYPE_P (type))
+ else if (!COMPLETE_TYPE_P (val->type) && COMPLETE_TYPE_P (type))
{
prevail = true;
build_bases = TYPE_BINFO (type);
More information about the Gcc-bugs
mailing list