re PR bootstrap/40082 (Power bootstrap is broken in building libstdc++)
authorJan Hubicka <jh@suse.cz>
Sat, 9 May 2009 18:31:32 +0000 (20:31 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 9 May 2009 18:31:32 +0000 (18:31 +0000)
PR bootstrap/40082
* ipa.c (update_inlined_to_pointer): New function.
(cgraph_remove_unreachable_nodes): Use it.

From-SVN: r147319

gcc/ChangeLog
gcc/ipa.c

index 26f2a689a2a34722a206f5117bc36e7bc8446a0f..6de79afa97a8705cc69ae789935bbbf99cae9a22 100644 (file)
@@ -1,3 +1,9 @@
+2009-05-09  Jan Hubicka  <jh@suse.cz>
+
+       PR bootstrap/40082
+       * ipa.c (update_inlined_to_pointer): New function.
+       (cgraph_remove_unreachable_nodes): Use it.
+
 2009-05-09  Jan Hubicka  <jh@suse.cz>
 
        * tree-eh.c (struct leh_state): Remove prev_try.
index 686ca9e1348085a1af5fbd589a86d5c04e08ab3f..b51c219d1fbd5852ca56eee50a432d6aac7d19f5 100644 (file)
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -92,6 +92,21 @@ cgraph_postorder (struct cgraph_node **order)
   return order_pos;
 }
 
+/* Look for all functions inlined to NODE and update their inlined_to pointers
+   to INLINED_TO.  */
+
+static void
+update_inlined_to_pointer (struct cgraph_node *node, struct cgraph_node *inlined_to)
+{
+  struct cgraph_edge *e;
+  for (e = node->callees; e; e = e->next_callee)
+    if (e->callee->global.inlined_to)
+      {
+        e->callee->global.inlined_to = inlined_to;
+       update_inlined_to_pointer (e->callee, inlined_to);
+      }
+}
+
 /* Perform reachability analysis and reclaim all unreachable nodes.
    If BEFORE_INLINING_P is true this function is called before inlining
    decisions has been made.  If BEFORE_INLINING_P is false this function also 
@@ -214,7 +229,8 @@ cgraph_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
          && !node->callers)
        {
          gcc_assert (node->clones);
-         node->global.inlined_to = false;
+         node->global.inlined_to = NULL;
+         update_inlined_to_pointer (node, node);
        }
       node->aux = NULL;
     }