aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo@gcc.gnu.org>2019-06-21 20:47:40 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2019-06-21 20:47:40 +0000
commit8924e9dd7183b97ab101e09816c88c8c1aac2bf0 (patch)
tree469ef61e585dcfb27357a90ae55e03d10ed49688 /gcc
parentf70d81ba7ec55aac1df0242e51d87578db968a32 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.dg/other/final3.C28
-rw-r--r--gcc/testsuite/g++.dg/other/final4.C16
-rw-r--r--gcc/testsuite/g++.dg/other/final5.C19
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" } }