From 8924e9dd7183b97ab101e09816c88c8c1aac2bf0 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 21 Jun 2019 20:47:40 +0000 Subject: [PATCH] re PR c++/90909 (call devirtualized to pure virtual) /cp 2019-06-21 Paolo Carlini PR c++/90909 Revert: 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-06-21 Paolo Carlini PR c++/90909 Revert: 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. * g++.dg/other/final6.C: New. From-SVN: r272574 --- gcc/testsuite/g++.dg/other/final3.C | 28 ---------------------------- gcc/testsuite/g++.dg/other/final4.C | 16 ---------------- gcc/testsuite/g++.dg/other/final5.C | 19 ------------------- 3 files changed, 63 deletions(-) delete mode 100644 gcc/testsuite/g++.dg/other/final3.C delete mode 100644 gcc/testsuite/g++.dg/other/final4.C delete mode 100644 gcc/testsuite/g++.dg/other/final5.C diff --git a/gcc/testsuite/g++.dg/other/final3.C b/gcc/testsuite/g++.dg/other/final3.C deleted file mode 100644 index a49dc22..0000000 --- a/gcc/testsuite/g++.dg/other/final3.C +++ /dev/null @@ -1,28 +0,0 @@ -// 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/final4.C b/gcc/testsuite/g++.dg/other/final4.C deleted file mode 100644 index 867ef38..0000000 --- a/gcc/testsuite/g++.dg/other/final4.C +++ /dev/null @@ -1,16 +0,0 @@ -// PR c++/67184 -// { dg-do compile { target c++11 } } -// { dg-options "-fdump-tree-original" } - -struct B -{ - virtual void operator()(); - virtual operator int(); - virtual int operator++(); -}; - -struct D final : B { }; - -void foo(D& d) { d(); int t = d; ++d; } - -// { 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 deleted file mode 100644 index 8a3e608..0000000 --- a/gcc/testsuite/g++.dg/other/final5.C +++ /dev/null @@ -1,19 +0,0 @@ -// 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.7.4