re PR ipa/63566 (i686 bootstrap fails: ICE RTL flag check: INSN_UID used with unexpec...
authorJan Hubicka <hubicka@ucw.cz>
Sun, 8 Feb 2015 20:08:21 +0000 (21:08 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sun, 8 Feb 2015 20:08:21 +0000 (20:08 +0000)
PR ipa/63566
* cgraphunit.c (cgraph_node::analyze): Be sure target of thunk is
aliases before trying to expand it.
(cgraph_node::expand_thunk): Fix formating.

From-SVN: r220518

gcc/ChangeLog
gcc/cgraphunit.c

index 465c99945abc813f3cecd6bd1977b5ed51fbec41..7122413fc0e6355405ba6849a23f3215c628781e 100644 (file)
@@ -1,3 +1,10 @@
+2015-02-08  Jan Hubicka  <hubicka@ucw.cz>
+
+       PR ipa/63566 
+       * cgraphunit.c (cgraph_node::analyze): Be sure target of thunk is
+       aliases before trying to expand it.
+       (cgraph_node::expand_thunk): Fix formating.
+
 2015-02-07  Sandra Loosemore  <sandra@codesourcery.com>
 
        * doc/extend.texi (Function Attributes [naked]): Copy-edit.
index 35b244e4b8189456861ab17152360b7fb4a6b154..8280fc4a1a3c3168a620608e879fa2a4dd0bff56 100644 (file)
@@ -580,8 +580,19 @@ cgraph_node::analyze (void)
 
   if (thunk.thunk_p)
     {
-      create_edge (cgraph_node::get (thunk.alias),
-                  NULL, 0, CGRAPH_FREQ_BASE);
+      cgraph_node *t = cgraph_node::get (thunk.alias);
+
+      create_edge (t, NULL, 0, CGRAPH_FREQ_BASE);
+      /* Target code in expand_thunk may need the thunk's target
+        to be analyzed, so recurse here.  */
+      if (!t->analyzed)
+       t->analyze ();
+      if (t->alias)
+       {
+         t = t->get_alias_target ();
+         if (!t->analyzed)
+           t->analyze ();
+       }
       if (!expand_thunk (false, false))
        {
          thunk.alias = NULL;
@@ -1515,7 +1526,8 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk)
       current_function_decl = thunk_fndecl;
 
       /* Ensure thunks are emitted in their correct sections.  */
-      resolve_unique_section (thunk_fndecl, 0, flag_function_sections);
+      resolve_unique_section (thunk_fndecl, 0,
+                             flag_function_sections);
 
       DECL_RESULT (thunk_fndecl)
        = build_decl (DECL_SOURCE_LOCATION (thunk_fndecl),
@@ -1568,7 +1580,8 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk)
       current_function_decl = thunk_fndecl;
 
       /* Ensure thunks are emitted in their correct sections.  */
-      resolve_unique_section (thunk_fndecl, 0, flag_function_sections);
+      resolve_unique_section (thunk_fndecl, 0,
+                             flag_function_sections);
 
       DECL_IGNORED_P (thunk_fndecl) = 1;
       bitmap_obstack_initialize (NULL);