r364359 - Revert Devirtualize destructor of final class.

Rumeet Dhindsa via cfe-commits cfe-commits at lists.llvm.org
Tue Jun 25 16:04:49 PDT 2019


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.ri at gmail.com> wrote:

> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190625/3d330975/attachment.html>


More information about the cfe-commits mailing list