diff options
author | Jan Hubicka <jh@suse.cz> | 2010-09-16 19:11:38 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2010-09-16 17:11:38 +0000 |
commit | 0cac82a0d30c211d3d0b093df4f5452cec11ef06 (patch) | |
tree | 2a2125a45a84290bd78aea1dd0bd4f7f0e06dafc /gcc/ipa.c | |
parent | 5ee996a2c62317d11b9ef0df4e2d7a1ac28d5759 (diff) | |
download | gcc-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.c | 24 |
1 files changed, 14 insertions, 10 deletions
@@ -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); |