aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2010-09-16 19:11:38 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2010-09-16 17:11:38 +0000
commit0cac82a0d30c211d3d0b093df4f5452cec11ef06 (patch)
tree2a2125a45a84290bd78aea1dd0bd4f7f0e06dafc /gcc/ipa.c
parent5ee996a2c62317d11b9ef0df4e2d7a1ac28d5759 (diff)
downloadgcc-0cac82a0d30c211d3d0b093df4f5452cec11ef06.zip
gcc-0cac82a0d30c211d3d0b093df4f5452cec11ef06.tar.gz
gcc-0cac82a0d30c211d3d0b093df4f5452cec11ef06.tar.bz2
pr45679-1_0.C: New file.
* g++.dg/lto/pr45679-1_0.C: New file. * g++.dg/lto/pr45679-1_1.C: New file. * g++.dg/lto/pr45679-0_0.C: New file. * g++.dg/lto/pr45679-0_1.C: New file. * lto-cgraph.c (lto_output_node): Fix handling of clones. * ipa.c (cgraph_remove_unreachabloe_nodes): Fix handling of unreachable clones with reachable clones. * tree-inline.c (copy_bb): Fix sanity checking when producing unreachable clone. From-SVN: r164344
Diffstat (limited to 'gcc/ipa.c')
-rw-r--r--gcc/ipa.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 48e331e..8c0ca86 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -407,22 +407,26 @@ cgraph_remove_unreachable_nodes (bool before_inlining_p, FILE *file)
if (!clone)
{
cgraph_release_function_body (node);
- node->analyzed = false;
node->local.inlinable = false;
+ if (node->prev_sibling_clone)
+ node->prev_sibling_clone->next_sibling_clone = node->next_sibling_clone;
+ else if (node->clone_of)
+ node->clone_of->clones = node->next_sibling_clone;
+ if (node->next_sibling_clone)
+ node->next_sibling_clone->prev_sibling_clone = node->prev_sibling_clone;
+#ifdef ENABLE_CHECKING
+ if (node->clone_of)
+ node->former_clone_of = node->clone_of->decl;
+#endif
+ node->clone_of = NULL;
+ node->next_sibling_clone = NULL;
+ node->prev_sibling_clone = NULL;
}
else
gcc_assert (!clone->in_other_partition);
+ node->analyzed = false;
cgraph_node_remove_callees (node);
ipa_remove_all_references (&node->ref_list);
- if (node->prev_sibling_clone)
- node->prev_sibling_clone->next_sibling_clone = node->next_sibling_clone;
- else if (node->clone_of)
- node->clone_of->clones = node->next_sibling_clone;
- if (node->next_sibling_clone)
- node->next_sibling_clone->prev_sibling_clone = node->prev_sibling_clone;
- node->clone_of = NULL;
- node->next_sibling_clone = NULL;
- node->prev_sibling_clone = NULL;
}
else
cgraph_remove_node (node);