aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2014-11-22 22:08:07 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2014-11-22 21:08:07 +0000
commit4ad08ee83804220dcc7e059e11377f18a2bb00ba (patch)
tree7f57169135a855a1a28976503c91b1195e9e7d5a /gcc/ipa.c
parent2d3a20632b8bbd0b80d2bbaba6d93032c0fb909b (diff)
downloadgcc-4ad08ee83804220dcc7e059e11377f18a2bb00ba.zip
gcc-4ad08ee83804220dcc7e059e11377f18a2bb00ba.tar.gz
gcc-4ad08ee83804220dcc7e059e11377f18a2bb00ba.tar.bz2
ipa.c (symbol_table::remove_unreachable_nodes): Mark all inline clones as having abstract origin used.
* ipa.c (symbol_table::remove_unreachable_nodes): Mark all inline clones as having abstract origin used. * ipa-inline-transform.c (can_remove_node_now_p_1): Drop abstract origin check. (clone_inlined_nodes): Copy abstract originflag. * lto-cgraph.c (compute_ltrans_boundary): Use get_create to get abstract origin node. From-SVN: r217973
Diffstat (limited to 'gcc/ipa.c')
-rw-r--r--gcc/ipa.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 54b30aa..4f87b75 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -360,9 +360,18 @@ symbol_table::remove_unreachable_nodes (bool before_inlining_p, FILE *file)
&& DECL_ABSTRACT_ORIGIN (node->decl))
{
struct cgraph_node *origin_node
- = cgraph_node::get_create (DECL_ABSTRACT_ORIGIN (node->decl));
- origin_node->used_as_abstract_origin = true;
- enqueue_node (origin_node, &first, &reachable);
+ = cgraph_node::get (DECL_ABSTRACT_ORIGIN (node->decl));
+ if (origin_node && !origin_node->used_as_abstract_origin)
+ {
+ origin_node->used_as_abstract_origin = true;
+ gcc_assert (!origin_node->prev_sibling_clone);
+ gcc_assert (!origin_node->next_sibling_clone);
+ for (cgraph_node *n = origin_node->clones; n;
+ n = n->next_sibling_clone)
+ if (n->decl == DECL_ABSTRACT_ORIGIN (node->decl))
+ n->used_as_abstract_origin = true;
+ enqueue_node (origin_node, &first, &reachable);
+ }
}
/* If any symbol in a comdat group is reachable, force
all externally visible symbols in the same comdat