diff options
author | Jason Merrill <jason@redhat.com> | 2014-08-19 14:25:45 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2014-08-19 14:25:45 -0400 |
commit | 27093ee4fc85ceb883cefc4f572ce4d4a9b68131 (patch) | |
tree | 56892d19137aa0a96badc189ed7f577a12b9794f /gcc | |
parent | 981ac3c795ed23053c0a82d01d8d3158429a547f (diff) | |
download | gcc-27093ee4fc85ceb883cefc4f572ce4d4a9b68131.zip gcc-27093ee4fc85ceb883cefc4f572ce4d4a9b68131.tar.gz gcc-27093ee4fc85ceb883cefc4f572ce4d4a9b68131.tar.bz2 |
re PR tree-optimization/62091 (ice in before_dom_children)
PR tree-optimization/62091
* decl2.c (decl_needed_p): Return true for virtual functions when
devirtualizing.
From-SVN: r214181
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ipa/devirt-38.C | 5 |
3 files changed, 12 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c60682e..26599c2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2014-08-19 Jason Merrill <jason@redhat.com> + PR tree-optimization/62091 + * decl2.c (decl_needed_p): Return true for virtual functions when + devirtualizing. + PR lto/53808 PR c++/61659 * decl.c (maybe_commonize_var): Don't use DECL_COMDAT to trigger diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index de28cb7..63583a8 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1975,6 +1975,11 @@ decl_needed_p (tree decl) if (flag_keep_inline_dllexport && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl))) return true; + /* Virtual functions might be needed for devirtualization. */ + if (flag_devirtualize + && TREE_CODE (decl) == FUNCTION_DECL + && DECL_VIRTUAL_P (decl)) + return true; /* Otherwise, DECL does not need to be emitted -- yet. A subsequent reference to DECL might cause it to be emitted later. */ return false; diff --git a/gcc/testsuite/g++.dg/ipa/devirt-38.C b/gcc/testsuite/g++.dg/ipa/devirt-38.C index be8cbdf..2d95bf7 100644 --- a/gcc/testsuite/g++.dg/ipa/devirt-38.C +++ b/gcc/testsuite/g++.dg/ipa/devirt-38.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } */ +/* { dg-options "-O2 -fdump-tree-ccp1" } */ class SnmpSyntax { public: @@ -27,4 +27,5 @@ void fn1 () c.m_fn1 (); } } -// Devirtualization to A::m_fn1 would be possible, but we can not do it at the moment +/* { dg-final { scan-tree-dump-not "OBJ_TYPE_REF" "ccp1" } } */ +/* { dg-final { cleanup-tree-dump "ccp1" } } */ |