re PR bootstrap/65232 (bootstrap failure (ICE in change_symbol_block, at varasm.c...
authorJan Hubicka <hubicka@ucw.cz>
Sat, 28 Feb 2015 22:46:22 +0000 (23:46 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 28 Feb 2015 22:46:22 +0000 (22:46 +0000)
PR ipa/65232
* ipa-icf.c (clear_decl_rtl): New function.
(sem_function::merge): Clear RTL before forming alias.
(sem_variable::merge): Clear RTL before forming alias.

From-SVN: r221078

gcc/ChangeLog
gcc/ipa-icf.c

index 2c8c9a58b740078475e83765bcd984d2b646b629..db44c2894f568587a861f6041647f015a43b42c3 100644 (file)
@@ -1,3 +1,10 @@
+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.
+       (sem_variable::merge): Clear RTL before forming alias.
+
 2015-02-28  Jan Hubicka  <hubicka@ucw.cz>
 
        PR ipa/65236
index 5d50b6f639b2b24d80696b05a75978064ce26e93..ef7c855c8e131d8f95afd223b55c404dc6bad971 100644 (file)
@@ -632,7 +632,7 @@ set_local (cgraph_node *node, void *data)
   return false;
 }
 
-/* TREE_ADDRESSABLE of NODE to true if DATA is non-NULL.
+/* TREE_ADDRESSABLE of NODE to true.
    Helper for call_for_symbol_thunks_and_aliases.  */
 
 static bool
@@ -642,6 +642,16 @@ set_addressable (varpool_node *node, void *)
   return false;
 }
 
+/* Clear DECL_RTL of NODE. 
+   Helper for call_for_symbol_thunks_and_aliases.  */
+
+static bool
+clear_decl_rtl (symtab_node *node, void *)
+{
+  SET_DECL_RTL (node->decl, NULL);
+  return false;
+}
+
 /* Redirect all callers of N and its aliases to TO.  Remove aliases if
    possible.  Return number of redirections made.  */
 
@@ -893,6 +903,9 @@ sem_function::merge (sem_item *alias_item)
       ipa_merge_profiles (original, alias);
       alias->release_body (true);
       alias->reset ();
+      /* Notice global symbol possibly produced RTL.  */
+      ((symtab_node *)alias)->call_for_symbol_and_aliases (clear_decl_rtl,
+                                                          NULL, true);
 
       /* Create the alias.  */
       cgraph_node::create_alias (alias_func->decl, decl);
@@ -1512,6 +1525,8 @@ sem_variable::merge (sem_item *alias_item)
       alias->analyzed = false;
 
       DECL_INITIAL (alias->decl) = NULL;
+      ((symtab_node *)alias)->call_for_symbol_and_aliases (clear_decl_rtl,
+                                                          NULL, true);
       alias->need_bounds_init = false;
       alias->remove_all_references ();
       if (TREE_ADDRESSABLE (alias->decl))