Author: rupprecht Date: Thu Jul 11 17:32:08 2019 New Revision: 365850 URL: http://llvm.org/viewvc/llvm-project?rev=365850&view=rev Log: Re-Revert Devirtualize destructor of final class.
This reverts r365509 (git commit d088720edad9c29ee0d622b5d69092e18a9ac0bd) This is a second revert[1] due to failures in internal test cases (shared offline) found during more thorough testing. [1] Original patch commited as r364100, reverted as r364359, recommitted as r365509 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=365850&r1=365849&r2=365850&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original) +++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Thu Jul 11 17:32:08 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=365849&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@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits