re PR c++/67184 (Missed optimization with C++11 final specifier)
authorPaolo Carlini <paolo.carlini@oracle.com>
Wed, 26 Jun 2019 08:51:50 +0000 (08:51 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Wed, 26 Jun 2019 08:51:50 +0000 (08:51 +0000)
2019-06-26  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/67184
PR c++/69445
* g++.dg/other/final3.C: New.
* g++.dg/other/final5.C: Likewise.

From-SVN: r272675

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/final3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/other/final5.C [new file with mode: 0644]

index a77eb7e04c6a2cae378e86f77806848df3726c58..4fbc331d8d9dcd96f36740748f7aa10971418a8c 100644 (file)
@@ -1,3 +1,10 @@
+2019-06-26  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/67184
+       PR c++/69445
+       * g++.dg/other/final3.C: New.
+       * g++.dg/other/final5.C: Likewise.
+
 2019-06-26  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/90991
diff --git a/gcc/testsuite/g++.dg/other/final3.C b/gcc/testsuite/g++.dg/other/final3.C
new file mode 100644 (file)
index 0000000..a49dc22
--- /dev/null
@@ -0,0 +1,28 @@
+// 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/final5.C b/gcc/testsuite/g++.dg/other/final5.C
new file mode 100644 (file)
index 0000000..8a3e608
--- /dev/null
@@ -0,0 +1,19 @@
+// 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" } }