Sorry for not including the reason, I discussed offline with the author to temporarily revert this patch.
On Tue, Jun 25, 2019 at 4:00 PM Roman Lebedev <lebedev...@gmail.com> wrote: > 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