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 db44c28..4c45c2e 100644 (file)
@@ -1,5 +1,11 @@
 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
        * ipa-icf.c (clear_decl_rtl): New function.
        (sem_function::merge): Clear RTL before forming alias.
index ef7c855..d66d4c8 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.  */