re PR ipa/65237 (r221040 caused many regressions)
authorJan Hubicka <hubicka@ucw.cz>
Sat, 28 Feb 2015 22:53:37 +0000 (23:53 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 28 Feb 2015 22:53:37 +0000 (22:53 +0000)
PR ipa/65237
* ipa-icf.c (sem_function::merge): Do not attempt to produce alias
across COMDAT group boundary.

From-SVN: r221079

gcc/ChangeLog
gcc/ipa-icf.c

index db44c2894f568587a861f6041647f015a43b42c3..4c45c2e72642c310d79882c9b84723bc34e3f6f6 100644 (file)
@@ -1,3 +1,9 @@
+2015-02-28  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/65237
+       * ipa-icf.c (sem_function::merge): Do not attempt to produce alias
+       across COMDAT group boundary.
+
 2015-02-28  Jan Hubicka  <hubicka@ucw.cz>
 
        PR ipa/65232
index ef7c855c8e131d8f95afd223b55c404dc6bad971..d66d4c8c07b7c34a30c0a218147a68c0bbc57358 100644 (file)
@@ -755,12 +755,17 @@ sem_function::merge (sem_item *alias_item)
        it is an external functions where we can not create an alias
        (ORIGINAL_DISCARDABLE)
      3) if target do not support symbol aliases.
+     4) original and alias lie in different comdat groups.
 
      If we can not produce alias, we will turn ALIAS into WRAPPER of ORIGINAL
      and/or redirect all callers from ALIAS to ORIGINAL.  */
   if ((original_address_matters && alias_address_matters)
-      || original_discardable
-      || !sem_item::target_supports_symbol_aliases_p ())
+      || (original_discardable
+         && (!DECL_COMDAT_GROUP (alias->decl)
+             || (DECL_COMDAT_GROUP (alias->decl)
+                 != DECL_COMDAT_GROUP (original->decl))))
+      || !sem_item::target_supports_symbol_aliases_p ()
+      || DECL_COMDAT_GROUP (alias->decl) != DECL_COMDAT_GROUP (original->decl))
     {
       /* First see if we can produce wrapper.  */