diff options
author | Paolo Carlini <paolo@gcc.gnu.org> | 2019-06-21 20:47:40 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2019-06-21 20:47:40 +0000 |
commit | 8924e9dd7183b97ab101e09816c88c8c1aac2bf0 (patch) | |
tree | 469ef61e585dcfb27357a90ae55e03d10ed49688 | |
parent | f70d81ba7ec55aac1df0242e51d87578db968a32 (diff) | |
download | gcc-8924e9dd7183b97ab101e09816c88c8c1aac2bf0.zip gcc-8924e9dd7183b97ab101e09816c88c8c1aac2bf0.tar.gz gcc-8924e9dd7183b97ab101e09816c88c8c1aac2bf0.tar.bz2 |
re PR c++/90909 (call devirtualized to pure virtual)
/cp
2019-06-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/90909
Revert:
2019-05-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/67184
PR c++/69445
* call.c (build_over_call): Devirtualize when the final overrider
comes from the base.
/testsuite
2019-06-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/90909
Revert:
2019-05-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/67184
PR c++/69445
* g++.dg/other/final3.C: New.
* g++.dg/other/final4.C: Likewise.
* g++.dg/other/final5.C: Likewise.
* g++.dg/other/final6.C: New.
From-SVN: r272574
-rw-r--r-- | gcc/testsuite/g++.dg/other/final3.C | 28 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/final4.C | 16 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/final5.C | 19 |
3 files changed, 0 insertions, 63 deletions
diff --git a/gcc/testsuite/g++.dg/other/final3.C b/gcc/testsuite/g++.dg/other/final3.C deleted file mode 100644 index a49dc22..0000000 --- a/gcc/testsuite/g++.dg/other/final3.C +++ /dev/null @@ -1,28 +0,0 @@ -// PR c++/67184 -// { dg-do compile { target c++11 } } -// { dg-options "-fdump-tree-original" } - -struct V { - virtual void foo(); -}; - -struct wV final : V { -}; - -struct oV final : V { - void foo(); -}; - -void call(wV& x) -{ - x.foo(); - x.V::foo(); -} - -void call(oV& x) -{ - x.foo(); - x.V::foo(); -} - -// { dg-final { scan-tree-dump-times "OBJ_TYPE_REF" 0 "original" } } diff --git a/gcc/testsuite/g++.dg/other/final4.C b/gcc/testsuite/g++.dg/other/final4.C deleted file mode 100644 index 867ef38..0000000 --- a/gcc/testsuite/g++.dg/other/final4.C +++ /dev/null @@ -1,16 +0,0 @@ -// PR c++/67184 -// { dg-do compile { target c++11 } } -// { dg-options "-fdump-tree-original" } - -struct B -{ - virtual void operator()(); - virtual operator int(); - virtual int operator++(); -}; - -struct D final : B { }; - -void foo(D& d) { d(); int t = d; ++d; } - -// { dg-final { scan-tree-dump-times "OBJ_TYPE_REF" 0 "original" } } diff --git a/gcc/testsuite/g++.dg/other/final5.C b/gcc/testsuite/g++.dg/other/final5.C deleted file mode 100644 index 8a3e608..0000000 --- a/gcc/testsuite/g++.dg/other/final5.C +++ /dev/null @@ -1,19 +0,0 @@ -// PR c++/69445 -// { dg-do compile { target c++11 } } -// { dg-options "-fdump-tree-original" } - -struct Base { - virtual void foo() const = 0; - virtual void bar() const {} -}; - -struct C final : Base { - void foo() const { } -}; - -void func(const C & c) { - c.bar(); - c.foo(); -} - -// { dg-final { scan-tree-dump-times "OBJ_TYPE_REF" 0 "original" } } |