Hi, ipa-devirt uses mangled names to establish equivalence in between symbols. I added assert for cloned names, since I convinced myself that otherwise we can miss matches in between local static symbols. I also convinced myself we should never rename.
I was wrong on both: declaration merging makes renaming safe and we rename on non-plugin-enabled systems. I am thus dropping this check. Comitted as obvious. * tree.c (types_same_for_odr): Drop overactive check. * ipa-devirt.c (hash_type_name): Likewise. Index: tree.c =================================================================== --- tree.c (revision 202271) +++ tree.c (working copy) @@ -11883,13 +11883,6 @@ types_same_for_odr (tree type1, tree typ } v1 = DECL_ASSEMBLER_NAME (v1); v2 = DECL_ASSEMBLER_NAME (v2); - /* If we ever start adding random .blah suffixes after - assembler names, we need to compare for match ignoring - these (and update odr_type_hash, too). */ -#ifdef ENABLE_CHECKING - gcc_assert (!strchr (IDENTIFIER_POINTER (v1), '.') - && !strchr (IDENTIFIER_POINTER (v2), '.')); -#endif return (v1 == v2); } Index: ipa-devirt.c =================================================================== --- ipa-devirt.c (revision 202271) +++ ipa-devirt.c (working copy) @@ -204,9 +204,6 @@ hash_type_name (tree t) } v = DECL_ASSEMBLER_NAME (v); -#ifdef ENABLE_CHECKING - gcc_assert (!strchr (IDENTIFIER_POINTER (v), '.')); -#endif hash = iterative_hash_hashval_t (hash, htab_hash_pointer (v)); return hash; }