On Wed, Jun 26, 2019 at 1:58 AM Rumeet Dhindsa via cfe-commits <cfe-commits@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@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits