From cdb42a36a1ebe89a30389a3847bd8937e4b997e5 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Tue, 21 May 2019 22:26:42 +0000 Subject: [PATCH] re PR c++/67184 (Missed optimization with C++11 final specifier) /cp 2019-05-21 Paolo Carlini 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 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 --- gcc/testsuite/g++.dg/other/final5.C | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 gcc/testsuite/g++.dg/other/final5.C diff --git a/gcc/testsuite/g++.dg/other/final5.C b/gcc/testsuite/g++.dg/other/final5.C new file mode 100644 index 00000000000..8a3e608a185 --- /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" } } -- 2.30.2