r364359 - Revert Devirtualize destructor of final class.
Roman Lebedev via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 25 15:59:34 PDT 2019
On Wed, Jun 26, 2019 at 1:58 AM Rumeet Dhindsa via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
>
> Author: rdhindsa
> Date: Tue Jun 25 15:58:25 2019
> New Revision: 364359
>
> URL: http://llvm.org/viewvc/llvm-project?rev=364359&view=rev
> Log:
> Revert Devirtualize destructor of final class.
>
> This reverts r364100 (git commit 405c2b16225fc6eaf5eb8ba3ce584699a3b159ef)
It is usually customary to specify the reason of the revert in the
commit message.
> Removed:
> cfe/trunk/test/CodeGenCXX/devirtualize-dtor-final.cpp
> Modified:
> cfe/trunk/lib/CodeGen/CGExprCXX.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=364359&r1=364358&r2=364359&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Tue Jun 25 15:58:25 2019
> @@ -1865,33 +1865,9 @@ static void EmitObjectDelete(CodeGenFunc
> Dtor = RD->getDestructor();
>
> if (Dtor->isVirtual()) {
> - bool UseVirtualCall = true;
> - const Expr *Base = DE->getArgument();
> - if (auto *DevirtualizedDtor =
> - dyn_cast_or_null<const CXXDestructorDecl>(
> - Dtor->getDevirtualizedMethod(
> - Base, CGF.CGM.getLangOpts().AppleKext))) {
> - UseVirtualCall = false;
> - const CXXRecordDecl *DevirtualizedClass =
> - DevirtualizedDtor->getParent();
> - if (declaresSameEntity(getCXXRecord(Base), DevirtualizedClass)) {
> - // Devirtualized to the class of the base type (the type of the
> - // whole expression).
> - Dtor = DevirtualizedDtor;
> - } else {
> - // Devirtualized to some other type. Would need to cast the this
> - // pointer to that type but we don't have support for that yet, so
> - // do a virtual call. FIXME: handle the case where it is
> - // devirtualized to the derived type (the type of the inner
> - // expression) as in EmitCXXMemberOrOperatorMemberCallExpr.
> - UseVirtualCall = true;
> - }
> - }
> - if (UseVirtualCall) {
> - CGF.CGM.getCXXABI().emitVirtualObjectDelete(CGF, DE, Ptr, ElementType,
> - Dtor);
> - return;
> - }
> + CGF.CGM.getCXXABI().emitVirtualObjectDelete(CGF, DE, Ptr, ElementType,
> + Dtor);
> + return;
> }
> }
> }
>
> Removed: cfe/trunk/test/CodeGenCXX/devirtualize-dtor-final.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/devirtualize-dtor-final.cpp?rev=364358&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/devirtualize-dtor-final.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/devirtualize-dtor-final.cpp (removed)
> @@ -1,23 +0,0 @@
> -// RUN: %clang_cc1 -triple i386-unknown-unknown -std=c++11 %s -emit-llvm -o - | FileCheck %s
> -
> -namespace Test1 {
> - struct A { virtual ~A() {} };
> - struct B final : A {};
> - struct C : A { virtual ~C() final {} };
> - struct D { virtual ~D() final = 0; };
> - // CHECK-LABEL: define void @_ZN5Test13fooEPNS_1BE
> - void foo(B *b) {
> - // CHECK: call void @_ZN5Test11BD1Ev
> - delete b;
> - }
> - // CHECK-LABEL: define void @_ZN5Test14foo2EPNS_1CE
> - void foo2(C *c) {
> - // CHECK: call void @_ZN5Test11CD1Ev
> - delete c;
> - }
> - // CHECK-LABEL: define void @_ZN5Test14evilEPNS_1DE
> - void evil(D *p) {
> - // CHECK-NOT: call void @_ZN5Test11DD1Ev
> - delete p;
> - }
> -}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list