aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo@gcc.gnu.org>2019-05-21 22:26:42 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2019-05-21 22:26:42 +0000
commitcdb42a36a1ebe89a30389a3847bd8937e4b997e5 (patch)
tree97b79b12042015bb7fc428bd1a08c04c14a346b0 /gcc
parentf2432de6cd0fd5754c2f526e27bc82911d5b8750 (diff)
downloadgcc-cdb42a36a1ebe89a30389a3847bd8937e4b997e5.zip
gcc-cdb42a36a1ebe89a30389a3847bd8937e4b997e5.tar.gz
gcc-cdb42a36a1ebe89a30389a3847bd8937e4b997e5.tar.bz2
re PR c++/67184 (Missed optimization with C++11 final specifier)
/cp 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-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. From-SVN: r271491
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.dg/other/final5.C19
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/other/final5.C b/gcc/testsuite/g++.dg/other/final5.C
new file mode 100644
index 0000000..8a3e608
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/final5.C
@@ -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" } }