diff options
author | Martin Jambor <mjambor@suse.cz> | 2013-01-17 12:43:14 +0100 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2013-01-17 12:43:14 +0100 |
commit | 8222c37ededfe0f55233898ecc7c4cc023f6389c (patch) | |
tree | 6eb8a1715d592561febe771539bf683003e002a1 /gcc/ipa-inline-transform.c | |
parent | c5e7e996fba2a45b4b36e8831c1d9dd4382d3b34 (diff) | |
download | gcc-8222c37ededfe0f55233898ecc7c4cc023f6389c.zip gcc-8222c37ededfe0f55233898ecc7c4cc023f6389c.tar.gz gcc-8222c37ededfe0f55233898ecc7c4cc023f6389c.tar.bz2 |
re PR tree-optimization/55264 (ICE: in ipa_make_edge_direct_to_target, at ipa-prop.c:2141 with -O2 -fno-early-inlining -fno-weak)
2013-01-17 Martin Jambor <mjambor@suse.cz>
PR tree-optimizations/55264
* ipa-inline-transform.c (can_remove_node_now_p_1): Never return true
for virtual methods.
* ipa.c (symtab_remove_unreachable_nodes): Never return true for
virtual methods before inlining is over.
* cgraph.h (cgraph_only_called_directly_or_aliased_p): Return false for
virtual functions.
* cgraphclones.c (cgraph_create_virtual_clone): Mark clones as
non-virtual.
testsuite/
* g++.dg/ipa/pr55264.C: New test.
From-SVN: r195262
Diffstat (limited to 'gcc/ipa-inline-transform.c')
-rw-r--r-- | gcc/ipa-inline-transform.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/gcc/ipa-inline-transform.c b/gcc/ipa-inline-transform.c index 0fb8940..cac20fe 100644 --- a/gcc/ipa-inline-transform.c +++ b/gcc/ipa-inline-transform.c @@ -92,9 +92,7 @@ can_remove_node_now_p_1 (struct cgraph_node *node) those only after all devirtualizable virtual calls are processed. Lacking may edges in callgraph we just preserve them post inlining. */ - && (!DECL_VIRTUAL_P (node->symbol.decl) - || (!DECL_COMDAT (node->symbol.decl) - && !DECL_EXTERNAL (node->symbol.decl))) + && !DECL_VIRTUAL_P (node->symbol.decl) /* During early inlining some unanalyzed cgraph nodes might be in the callgraph and they might reffer the function in question. */ && !cgraph_new_nodes); |