diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/ipa')
61 files changed, 305 insertions, 56 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-1.C index de0f665c4..710a99c6f 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-1.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-1.C @@ -1,6 +1,6 @@ /* Verify that simple virtual calls are converted to direct calls by ipa-cp. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-10.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-10.C index 658442e34..b58e1e036 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-10.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-10.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fdump-ipa-inline -fdump-ipa-cp -fno-early-inlining" } */ +/* { dg-options "-O3 -fdump-ipa-inline -fdump-ipa-cp -fno-early-inlining -fdevirtualize" } */ class wxPaintEvent { }; struct wxDCBase { diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C index e31832b87..dae47f700 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-11.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-ipa-inline --param=early-inlining-insns-comdat=0 -fno-devirtualize-speculatively" } */ +/* { dg-options "-O2 -fdump-ipa-inline --param=early-inlining-insns-comdat=0 -fno-devirtualize-speculatively -fdevirtualize" } */ int baz (); struct A { diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-12.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-12.C index 16bae4d8d..4d713714c 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-12.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-12.C @@ -1,5 +1,5 @@ // { dg-do compile { target c++11 } } -// { dg-options "-O -fdump-ipa-inline" } +// { dg-options "-O -fdump-ipa-inline -fdevirtualize" } class Foo { diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-13.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-13.C index b338a4c34..4b2ff069b 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-13.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-13.C @@ -1,6 +1,6 @@ /* { dg-do run } */ /* Call to foo should be devirtualized because there are no derived types of A. */ -/* { dg-options "-O2 -fdump-tree-ssa" } */ +/* { dg-options "-O2 -fdump-tree-ssa -fdevirtualize" } */ namespace { class A { public: diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-14.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-14.C index 456d44f84..517173065 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-14.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-14.C @@ -2,7 +2,7 @@ because the constructor of A is unreachable and therefore the virtual method table referring to A::foo is optimized out. */ /* { dg-do run } */ -/* { dg-options "-O2 -fdump-tree-ssa" } */ +/* { dg-options "-O2 -fdump-tree-ssa -fdevirtualize" } */ class B { public: virtual int foo(void) diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-15.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-15.C index 2ea85f487..2c041b5a2 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-15.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-15.C @@ -1,7 +1,7 @@ /* Check that we speculatively devirutalize call to FOO to B::foo becuase A is noreturn. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-ipa-devirt -fdump-tree-optimized" } */ +/* { dg-options "-O2 -fdump-ipa-devirt -fdump-tree-optimized -fdevirtualize" } */ class A { public: virtual int foo(void) diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-16.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-16.C index 85567867f..d0ac06134 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-16.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-16.C @@ -1,7 +1,7 @@ /* We shall devirtualize to unreachable. No anonymous type method should surivve reachability. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-ipa-whole-program" } */ +/* { dg-options "-O2 -fdump-ipa-whole-program -fdevirtualize" } */ namespace { class B { public: diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-17.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-17.C index 9edfd73af..56e4294ab 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-17.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-17.C @@ -1,7 +1,7 @@ /* We shall devirtualize to B::foo since it is the only live candidate of an anonymous type. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-ipa-whole-program" } */ +/* { dg-options "-O2 -fdump-ipa-whole-program -fdevirtualize" } */ namespace { class B { public: diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-18.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-18.C index dbbe597c9..6729d7c42 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-18.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-18.C @@ -1,7 +1,7 @@ /* We shall devirtualize to unreachable. No anonymous type method should surivve reachability. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-ssa" } */ +/* { dg-options "-O2 -fdump-tree-ssa -fdevirtualize" } */ namespace { class B { public: diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-19.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-19.C index 13686e3e0..8fb82a288 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-19.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-19.C @@ -2,7 +2,7 @@ Previously we were failing by considering CLOBBER statement to be a type change. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-ipa-cp" } */ +/* { dg-options "-O2 -fdump-ipa-cp -fdevirtualize" } */ struct A { void operator==(const A &); }; diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-2.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-2.C index d3181e4c0..95eba9c60 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-2.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-2.C @@ -1,7 +1,7 @@ /* Verify that simple virtual calls using this pointer are converted to direct calls by ipa-cp. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-20.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-20.C index 0ea245baf..85e064b99 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-20.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-20.C @@ -1,6 +1,6 @@ #include <stdlib.h> /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-release_ssa" } */ +/* { dg-options "-O2 -fdump-tree-release_ssa -fdevirtualize" } */ namespace { struct A { int a; virtual int foo() {return a;} void bar() {a=7;} }; diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-21.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-21.C index 675bd08d7..7791cb94f 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-21.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-21.C @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp -fdevirtualize" } */ /* Main purpose is to verify that we do not produce wrong devirtualization to C::m_fn1. We currently devirtualize to B::m_fn1, so check that. */ #include <stdlib.h> diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-22.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-22.C index 37e766945..194d60004 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-22.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-22.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp -fdevirtualize" } */ class A {}; class B { public: diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-23.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-23.C index 98d86aee8..52e3c9cef 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-23.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-23.C @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -fno-partial-inlining -fdump-ipa-cp -fno-devirtualize-speculatively" } */ +/* { dg-options "-O3 -fno-partial-inlining -fdump-ipa-cp -fno-devirtualize-speculatively -fdevirtualize" } */ /* Main purpose is to verify that we do not produce wrong devirtualization to C::m_fn1. We currently devirtualize to B::m_fn1, so check that. */ #include <stdlib.h> diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-24.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-24.C index 01bfdc2ec..4bba9b0c9 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-24.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-24.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fno-ipa-sra -fdump-ipa-inline -fdump-ipa-cp" } */ +/* { dg-options "-O3 -fno-ipa-sra -fdump-ipa-inline -fdump-ipa-cp --param=early-inlining-insns-comdat=0 -fdevirtualize" } */ void pad(void); class A {}; class B { diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C index 1da44f5d1..fed7a96ef 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-25.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fdump-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-cp -fdevirtualize" } */ class ert_RefCounter { protected: diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-26.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-26.C index 2df429c34..f8b33e288 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-26.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-26.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fdump-ipa-devirt" } */ +/* { dg-options "-O3 -fdump-ipa-devirt -fdevirtualize" } */ struct A { int a; diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-27.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-27.C index 749f40af1..eb064990b 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-27.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-27.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fdump-tree-optimized" } */ +/* { dg-options "-O3 -fdump-tree-optimized -fdevirtualize" } */ struct A { int a; diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28.C index e18b81897..9bfef924d 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28.C @@ -1,5 +1,5 @@ // PR c++/58678 -// { dg-options "-O3 -fdump-ipa-devirt" } +// { dg-options "-O3 -fdump-ipa-devirt -fdevirtualize" } struct A { virtual ~A(); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28a.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28a.C new file mode 100644 index 000000000..65d5fcdf3 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-28a.C @@ -0,0 +1,15 @@ +// PR c++/58678 +// { dg-options "-O3 -flto -shared -fPIC -Wl,--no-undefined" } +// { dg-do link { target { { gld && fpic } && shared } } } + +struct A { + virtual ~A(); +}; +struct B : A { + virtual int m_fn1(); +}; +void fn1(B* b) { + delete b; +} + +int main() {} diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-29.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-29.C index b4f24a104..ebfd01b60 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-29.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-29.C @@ -1,7 +1,7 @@ /* { dg-do run { target c++11 } } */ /* There is a devirtualizable call. In PR60306 we deduced wrong target to cxa_pure_virtual. For gcc 4.10 we temporarily disable the devirtualization. */ -/* { dg-options "-O3" } */ +/* { dg-options "-O3 -fdevirtualize" } */ #include <vector> diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-3.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-3.C index a68eb024f..45ad33756 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-3.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-3.C @@ -1,7 +1,7 @@ /* Verify that simple virtual calls on an object refrence are converted to simple calls by ipa-cp. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-30.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-30.C index c4ac6940a..b147476f7 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-30.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-30.C @@ -1,5 +1,5 @@ // PR c++/58678 -// { dg-options "-O3 -fdump-ipa-devirt" } +// { dg-options "-O3 -fdump-ipa-devirt -fdevirtualize" } // We shouldn't speculatively devirtualize to ~B because B is an abstract // class; any actual object passed to f will be of some derived class which diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C index 64c44ba1e..16c782025 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-31.C @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -std=c++11 -fdump-ipa-inline" } */ +/* { dg-options "-O2 -std=c++11 -fdump-ipa-inline -fdevirtualize" } */ #include <new> class EmbeddedObject { diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-39.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-39.C index fbeea126e..38e280899 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-39.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-39.C @@ -1,5 +1,5 @@ // PR c++/61214 -/* { dg-options "-O2 -fdump-tree-optimized" } */ +/* { dg-options "-O2 -fdump-tree-optimized -fdevirtualize" } */ struct Base { @@ -24,5 +24,4 @@ int main() return 0; } -/* { dg-final { scan-tree-dump-not "OBJ_TYPE_REF" "optimized" } } */ -/* { dg-final { cleanup-tree-dump "optimized" } } */ +/* { dg-final { scan-assembler-not "_ZN3Foo5cloneEv" } } */ diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-4.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-4.C index 72c883b3f..64f8eb05d 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-4.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-4.C @@ -1,7 +1,7 @@ /* Verify that ipa-co can convert virtual calls to direct ones even when a typecast to an ancestor is involved along the way. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-40.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-40.C new file mode 100644 index 000000000..9c3bdf5e9 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-40.C @@ -0,0 +1,21 @@ +// PR c++/62224 +// { dg-options "-O2" } +// For 4.9, we don't want to devirtualize f and thus create a reference to g. + +struct A +{ + virtual void f () = 0; +}; + +class B : A +{ + virtual void f () { g(); } + void g(); +}; + +void h (A *a) +{ + a->f (); +} + +// { dg-final { scan-assembler-not "_ZN1B1gEv" } } diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-5.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-5.C index 575bc0271..980b59617 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-5.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-5.C @@ -2,7 +2,7 @@ ones even when a typecast to an ancestor is involved along the way and that ancestor is not the first one with virtual functions. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-6.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-6.C index e9a5d7093..4599878d1 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-6.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-6.C @@ -2,7 +2,7 @@ spot that foo changes the dynamic type of the passed object. */ /* { dg-do run } */ -/* { dg-options "-O3" } */ +/* { dg-options "-O3 -fdevirtualize" } */ extern "C" void abort (void); extern "C" void *malloc(__SIZE_TYPE__); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-7.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-7.C index 1c5912230..d2059baf6 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-7.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-7.C @@ -1,7 +1,7 @@ /* Verify that IPA-CP can do devirtualization even if the virtual call comes from a method that has been early-inlined into a descendant. */ /* { dg-do run } */ -/* { dg-options "-O3 -fdump-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-cp -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C index dc6c6c940..ce4febd9f 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-9.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-ipa-whole-program --param=early-inlining-insns-comdat=0" } */ +/* { dg-options "-O2 -fdump-ipa-whole-program --param=early-inlining-insns-comdat=0 -fdevirtualize" } */ double foo (); struct B { diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-1.C index dcd804659..5e1348baa 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-1.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-1.C @@ -1,7 +1,7 @@ /* Verify that ipa-cp correctly detects the dynamic type of an object under construction when doing devirtualization. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-2.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-2.C index b9a36e29f..451b2293e 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-2.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-2.C @@ -1,7 +1,7 @@ /* Verify that ipa-cp correctly detects the dynamic type of an object under construction when doing devirtualization. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-3.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-3.C index c8791f79e..321eea478 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-3.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-3.C @@ -1,7 +1,7 @@ /* Verify that ipa-cp correctly detects the dynamic type of an object under construction when doing devirtualization. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-inline" } */ +/* { dg-options "-O3 -fno-inline -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-4.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-4.C index 56d41e496..24dfe3dab 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-4.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-4.C @@ -1,7 +1,7 @@ /* Verify that ipa-cp correctly detects the dynamic type of an object under construction when doing devirtualization. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-inline" } */ +/* { dg-options "-O3 -fno-inline -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-5.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-5.C index 637d7d4be..f3d6b0014 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-5.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-5.C @@ -1,7 +1,7 @@ /* Verify that ipa-cp correctly detects the dynamic type of an object under construction when doing devirtualization. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-6.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-6.C index f9b8b6954..8e5a2bf47 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-6.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-6.C @@ -1,7 +1,7 @@ /* Verify that ipa-cp correctly detects the dynamic type of an object under construction when doing devirtualization. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-inline" } */ +/* { dg-options "-O3 -fno-inline -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-7.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-7.C index 2e76cbe40..08f2d3043 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-7.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-7.C @@ -2,7 +2,7 @@ object within another one when looking for dynamic type change . */ /* { dg-do run } */ /* { dg-require-effective-target nonpic } */ -/* { dg-options "-O3 -Wno-attributes" } */ +/* { dg-options "-O3 -Wno-attributes -fdevirtualize" } */ extern "C" void abort (void); namespace std { diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-8.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-8.C index 309644d92..2e417ec2c 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-8.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-c-8.C @@ -1,7 +1,7 @@ /* Verify that ipa-cp correctly detects the dynamic type of an object under construction when doing devirtualization. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-d-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-d-1.C index 3897a7782..d84dd9fe0 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-d-1.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-d-1.C @@ -1,7 +1,7 @@ /* Verify that ipa-cp correctly detects the dynamic type of an object under destruction when doing devirtualization. */ /* { dg-do run } */ -/* { dg-options "-O3 -fno-early-inlining -fno-inline" } */ +/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-g-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-g-1.C index 175f24efb..41f23453c 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-g-1.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/devirt-g-1.C @@ -1,5 +1,5 @@ // { dg-do compile } -// { dg-options "-O2 -fdump-ipa-cp -fdump-tree-optimized" } +// { dg-options "-O2 -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" } struct S { S(); virtual void xyzzy(); void otherstuff(); }; struct R { int a; S s; R(); }; diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-1.C index 32f7258a4..f530adad2 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-1.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-1.C @@ -1,7 +1,7 @@ /* Verify that virtual calls are folded even early inlining puts them into one function with the definition. */ /* { dg-do run } */ -/* { dg-options "-O2 -fdump-tree-fre1-details" } */ +/* { dg-options "-O2 -fdump-tree-fre1-details -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-2.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-2.C index 5bddc2fcb..bce0e96ed 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-2.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/imm-devirt-2.C @@ -1,7 +1,7 @@ /* Verify that virtual calls are folded even early inlining puts them into one function with the definition. */ /* { dg-do run } */ -/* { dg-options "-O2 -fdump-tree-fre1-details" } */ +/* { dg-options "-O2 -fdump-tree-fre1-details -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-1.C index bc4dfea5c..39dbf59f0 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-1.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-1.C @@ -1,7 +1,7 @@ /* Verify that simple virtual calls are inlined even without early inlining. */ /* { dg-do run { target nonpic } } */ -/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-2.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-2.C index 001cff204..0607ffbbe 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-2.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-2.C @@ -1,7 +1,7 @@ /* Verify that simple virtual calls using this pointer are inlined even without early inlining.. */ /* { dg-do run { target nonpic } } */ -/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-3.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-3.C index 637a6aecc..5b6322ed1 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-3.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-3.C @@ -1,7 +1,7 @@ /* Verify that simple virtual calls on an object refrence are inlined even without early inlining. */ /* { dg-do run { target nonpic } } */ -/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-4.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-4.C index f5b8f8e5d..5358ebfde 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-4.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-4.C @@ -2,7 +2,7 @@ inlining, even when a typecast to an ancestor is involved along the way. */ /* { dg-do run { target nonpic } } */ -/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-5.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-5.C index d78173d69..33c1d7bf5 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-5.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-5.C @@ -1,7 +1,7 @@ /* Verify that virtual call inlining does not pick a wrong method when there is a user defined ancestor in an object. */ /* { dg-do run { target nonpic } } */ -/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-7.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-7.C index 9d725a508..e6ba8505d 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-7.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-7.C @@ -2,7 +2,7 @@ inlining, even when a typecast to an ancestor is involved along the way and that ancestor is not the first one with virtual functions. */ /* { dg-do run { target nonpic } } */ -/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-8.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-8.C index eebfc6af1..606049aad 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-8.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-8.C @@ -1,7 +1,7 @@ /* Verify that virtual calls are inlined (ithout early inlining) even when their caller is itself indirectly inlined. */ /* { dg-do run { target nonpic } } */ -/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-9.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-9.C index 586c3af30..dec234e06 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-9.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/ivinline-9.C @@ -3,7 +3,7 @@ way and that ancestor itself has an ancestor wich is not the primary base class. */ /* { dg-do run { target nonpic } } */ -/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp -fdevirtualize" } */ extern "C" void abort (void); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C index b9039cb85..4d0db6be4 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60600.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fdump-ipa-cp" } */ +/* { dg-options "-O3 -fdump-ipa-cp -fdevirtualize" } */ struct data { data(int); diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60640-4.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60640-4.C index eb9eb627f..d290450cd 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60640-4.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr60640-4.C @@ -1,5 +1,5 @@ // { dg-do run } -// { dg-options "-O3 -fdump-ipa-cp" } +// { dg-options "-O3 -fdump-ipa-cp -fdevirtualize" } struct Distraction { diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61654.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61654.C new file mode 100644 index 000000000..d07e4586b --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr61654.C @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +/* The bug only presented itself on a 32 bit i386 but in theory it might also + pop up elsewhere and we do not want to put -m32 options to testcase + options. */ + +struct A +{ + virtual int a (int, int = 0) = 0; + void b (); + void c (); + int d; +}; + +struct B : virtual A +{ + int a (int, int); + int e; +}; + +int f; + +void +A::b () +{ + a (0); +} + +void +A::c () +{ + a (f); +} + +int +B::a (int, int) +{ + return e; +} diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr62015.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr62015.C new file mode 100644 index 000000000..950b46e75 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr62015.C @@ -0,0 +1,55 @@ +/* { dg-do run } */ +/* { dg-options "-O3 -std=c++11" } */ + + +extern "C" int printf(const char *fmt, ...); +extern "C" void abort(void); + +struct Side { + enum _Value { Left, Right, Invalid }; + + constexpr Side() : _value(Invalid) {} + constexpr Side(_Value value) : _value(value) {} + operator _Value() const { return (_Value)_value; } + + private: + char _value; +}; + +struct A { + void init(); + void adjust(Side side, bool final); + void move(Side side); +}; + +void A::init() +{ + adjust(Side::Invalid, false); +} + +static void __attribute__((noinline)) +check (int v, int final) +{ + if (v != 0) + abort(); +} + + +__attribute__((noinline)) +void A::adjust(Side side, bool final) +{ + check ((int)side, final); +} + +void A::move(Side side) +{ + adjust(side, false); + adjust(side, true); +} + +int main() +{ + A t; + t.move(Side::Left); + return 0; +} diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63306.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63306.C new file mode 100644 index 000000000..e22a4c2a0 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63306.C @@ -0,0 +1,14 @@ +// PR c++/63306 +// { dg-do compile { target c++11 } } + +template <typename...> +class A; + +class B +{ + B (const int &, const A<int, int> &); +}; + +B::B (const int &, const A<int, int> &) +{ +} diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63838.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63838.C new file mode 100644 index 000000000..d67364900 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr63838.C @@ -0,0 +1,56 @@ +// PR ipa/63838 +// { dg-do run } +// { dg-options "-O2 -fdump-ipa-pure-const" } +// { dg-final { scan-ipa-dump-not "Function found to be nothrow: void foo" "pure-const" } } +// { dg-final { scan-ipa-dump-not "Function found to be nothrow: void bar" "pure-const" } } +// { dg-final { cleanup-ipa-dump "pure-const" } } + +__attribute__((noinline, noclone)) static void bar (int); +volatile int v; +void (*fn) (); +struct S { S () { v++; } ~S () { v++; } }; + +__attribute__((noinline, noclone)) static void +foo (int x) +{ + v++; + if (x == 5) + bar (x); +} + +__attribute__((noinline, noclone)) static void +bar (int x) +{ + v++; + if (x == 6) + foo (x); + else if (x == 5) + fn (); +} + +__attribute__((noinline, noclone)) int +baz (int x) +{ + S s; + foo (x); +} + +void +throw0 () +{ + throw 0; +} + +int +main () +{ + fn = throw0; + asm volatile ("" : : : "memory"); + try + { + baz (5); + } + catch (int) + { + } +} diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr64068.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr64068.C new file mode 100644 index 000000000..95288836c --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/pr64068.C @@ -0,0 +1,49 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +typedef int PROV_ENUMALGS_EX, PCCRYPT_OID_INFO; +class A { + int m_fn2(); + virtual bool m_fn1(PCCRYPT_OID_INFO); +}; +int fn1(); +void fn2(); +int A::m_fn2() { m_fn1(0); } + +bool fn3() { + for (;;) { + if (fn1()) { + if (fn1() != 259) + fn2(); + break; + } + return 1; + } + return 0; +} + +class B { +public: + B() { fn3(); } +}; +class C : A { + bool m_fn1(PCCRYPT_OID_INFO) { m_fn3(); } + int isSupportedByProvider_algId; + PROV_ENUMALGS_EX isSupportedByProvider_outEnumAlgs; + PROV_ENUMALGS_EX isSupportedByProvider_enumAlgs; + bool m_fn3() { + while (1) { + if (fn1()) { + if (fn1() != 259) + fn2(); + break; + } + if (isSupportedByProvider_algId) + isSupportedByProvider_outEnumAlgs = isSupportedByProvider_enumAlgs; + return 1; + } + return 0; + } +}; + +void fn4() { B(); } diff --git a/gcc-4.9/gcc/testsuite/g++.dg/ipa/type-inheritance-1.C b/gcc-4.9/gcc/testsuite/g++.dg/ipa/type-inheritance-1.C index 818002ec1..a0c151122 100644 --- a/gcc-4.9/gcc/testsuite/g++.dg/ipa/type-inheritance-1.C +++ b/gcc-4.9/gcc/testsuite/g++.dg/ipa/type-inheritance-1.C @@ -1,7 +1,7 @@ /* Verify that callgraph construction keeps FOO for possible devirtualization and removes BAR. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-ipa-visibility" } */ +/* { dg-options "-O2 -fdump-ipa-visibility -fdevirtualize" } */ extern "C" void abort (void); |