From 21f4138046b46babd9903786af2dc27d7743d54c Mon Sep 17 00:00:00 2001 From: hubicka Date: Sat, 9 May 2009 18:31:32 +0000 Subject: [PATCH] PR bootstrap/40082 * 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 | 6 ++++++ gcc/ipa.c | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 26f2a689a2a..6de79afa97a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2009-05-09 Jan Hubicka + PR bootstrap/40082 + * ipa.c (update_inlined_to_pointer): New function. + (cgraph_remove_unreachable_nodes): Use it. + +2009-05-09 Jan Hubicka + * tree-eh.c (struct leh_state): Remove prev_try. (lower_try_finally, lower_catch, lower_eh_filter, lower_cleanup): Do not track prev_try. diff --git a/gcc/ipa.c b/gcc/ipa.c index 686ca9e1348..b51c219d1fb 100644 --- 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; } -- 2.11.0