diff options
author | Paolo Carlini <paolo@gcc.gnu.org> | 2019-05-21 22:26:42 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2019-05-21 22:26:42 +0000 |
commit | cdb42a36a1ebe89a30389a3847bd8937e4b997e5 (patch) | |
tree | 97b79b12042015bb7fc428bd1a08c04c14a346b0 /gcc | |
parent | f2432de6cd0fd5754c2f526e27bc82911d5b8750 (diff) | |
download | gcc-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.C | 19 |
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" } } |