From 2bca2d6a7274f4119d36285f386cd8a1e7f72334 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Wed, 26 Jun 2019 08:51:50 +0000 Subject: [PATCH] re PR c++/67184 (Missed optimization with C++11 final specifier) 2019-06-26 Paolo Carlini PR c++/67184 PR c++/69445 * g++.dg/other/final3.C: New. * g++.dg/other/final5.C: Likewise. From-SVN: r272675 --- gcc/testsuite/ChangeLog | 7 +++++++ gcc/testsuite/g++.dg/other/final3.C | 28 ++++++++++++++++++++++++++++ gcc/testsuite/g++.dg/other/final5.C | 19 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 gcc/testsuite/g++.dg/other/final3.C create mode 100644 gcc/testsuite/g++.dg/other/final5.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a77eb7e04c6..4fbc331d8d9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2019-06-26 Paolo Carlini + + PR c++/67184 + PR c++/69445 + * g++.dg/other/final3.C: New. + * g++.dg/other/final5.C: Likewise. + 2019-06-26 Jakub Jelinek 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 index 00000000000..a49dc22a0d2 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/final3.C @@ -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 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