re PR c++/90909 (call devirtualized to pure virtual)
authorPaolo Carlini <paolo@gcc.gnu.org>
Fri, 21 Jun 2019 20:47:40 +0000 (20:47 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 21 Jun 2019 20:47:40 +0000 (20:47 +0000)
/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

gcc/testsuite/g++.dg/other/final3.C [deleted file]
gcc/testsuite/g++.dg/other/final4.C [deleted file]
gcc/testsuite/g++.dg/other/final5.C [deleted file]

diff --git a/gcc/testsuite/g++.dg/other/final3.C b/gcc/testsuite/g++.dg/other/final3.C
deleted file mode 100644 (file)
index a49dc22..0000000
+++ /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 (file)
index 867ef38..0000000
+++ /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 (file)
index 8a3e608..0000000
+++ /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" } }