OSDN Git Service

PR bootstrap/40082
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 May 2009 18:31:32 +0000 (18:31 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 May 2009 18:31:32 +0000 (18:31 +0000)
* ipa.c (update_inlined_to_pointer): New function.
(cgraph_remove_unreachable_nodes): Use it.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147319 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/ipa.c

index 26f2a68..6de79af 100644 (file)
@@ -1,5 +1,11 @@
 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.
        (lower_try_finally, lower_catch, lower_eh_filter, lower_cleanup): Do
        not track prev_try.
index 686ca9e..b51c219 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;
     }