diff options
author | Martin Jambor <mjambor@suse.cz> | 2013-01-17 11:43:14 +0000 |
---|---|---|
committer | Martin Jambor <mjambor@suse.cz> | 2013-01-17 11:43:14 +0000 |
commit | 2f72907613032a75336a1eb7fb06b68ed8798d53 (patch) | |
tree | 6eb8a1715d592561febe771539bf683003e002a1 /gcc/ipa.c | |
parent | 5190023f4f41d17aef7877ccf46864c90cde3016 (diff) |
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.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@195262 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ipa.c')
-rw-r--r-- | gcc/ipa.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/gcc/ipa.c b/gcc/ipa.c index f87e03b7e04..a9b8fb41988 100644 --- a/gcc/ipa.c +++ b/gcc/ipa.c @@ -241,8 +241,7 @@ symtab_remove_unreachable_nodes (bool before_inlining_p, FILE *file) && (!cgraph_can_remove_if_no_direct_calls_and_refs_p (node) /* Keep around virtual functions for possible devirtualization. */ || (before_inlining_p - && DECL_VIRTUAL_P (node->symbol.decl) - && (DECL_COMDAT (node->symbol.decl) || DECL_EXTERNAL (node->symbol.decl))))) + && DECL_VIRTUAL_P (node->symbol.decl)))) { gcc_assert (!node->global.inlined_to); pointer_set_insert (reachable, node); |