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