From: Jason Merrill Date: Tue, 19 Aug 2014 18:25:45 +0000 (-0400) Subject: re PR tree-optimization/62091 (ice in before_dom_children) X-Git-Tag: releases/gcc-5.1.0~5354 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=27093ee4fc85ceb883cefc4f572ce4d4a9b68131;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c60682e17872..26599c24c3f1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2014-08-19 Jason Merrill + 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 de28cb712c3a..63583a8dc6ae 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 be8cbdfa563b..2d95bf741645 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" } } */