From 0c0b34e21f2e5e9e40a381f70112e00546650d61 Mon Sep 17 00:00:00 2001 From: Derek Schuff <dschuff@google.com> Date: Tue, 10 May 2016 17:44:50 +0000 Subject: [PATCH] Clarify condition, remove redundant check git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@269087 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGDeclCXX.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/CodeGen/CGDeclCXX.cpp b/lib/CodeGen/CGDeclCXX.cpp index 967e57893b2..65954bde373 100644 --- a/lib/CodeGen/CGDeclCXX.cpp +++ b/lib/CodeGen/CGDeclCXX.cpp @@ -87,15 +87,17 @@ static void EmitDeclDestroy(CodeGenFunction &CGF, const VarDecl &D, llvm::Constant *argument; // Special-case non-array C++ destructors, if they have the right signature - // that can be directly registered with __cxa_atexit. If __cxa_atexit is - // disabled via a flag, a different helper function is generated anyway. + // that can be directly registered with __cxa_atexit. const CXXRecordDecl *Record = type->getAsCXXRecordDecl(); bool CanRegisterDestructor = Record && !CGM.getCXXABI().HasThisReturn(GlobalDecl( Record->getDestructor(), Dtor_Complete)); - - if (dtorKind == QualType::DK_cxx_destructor && Record && - (CanRegisterDestructor || !CGM.getCodeGenOpts().CXAAtExit)) { + // If __cxa_atexit is disabled via a flag, a different helper function is + // generated elsewhere which uses atexit instead, and it takes the destructor + // directly. + bool UsingExternalHelper = !CGM.getCodeGenOpts().CXAAtExit; + if (Record && + (CanRegisterDestructor || UsingExternalHelper)) { assert(!Record->hasTrivialDestructor()); CXXDestructorDecl *dtor = Record->getDestructor(); -- GitLab