summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorDerek Schuff <dschuff@google.com>2016-05-10 17:44:48 +0000
committerDerek Schuff <dschuff@google.com>2016-05-10 17:44:48 +0000
commit060fd220932100462411c582e8866f55b55f7a09 (patch)
tree8bf954da2d76ab62363d7f27fdef5d3f3edf2075 /clang/lib/CodeGen
parentcc42df4a3024d9785ac17867db0b3af5f25285e9 (diff)
downloadbcm5719-llvm-060fd220932100462411c582e8866f55b55f7a09.tar.gz
bcm5719-llvm-060fd220932100462411c582e8866f55b55f7a09.zip
Clean up condition, add ARM to test
llvm-svn: 269086
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r--clang/lib/CodeGen/CGDeclCXX.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp
index 47db5440042..967e57893b2 100644
--- a/clang/lib/CodeGen/CGDeclCXX.cpp
+++ b/clang/lib/CodeGen/CGDeclCXX.cpp
@@ -89,14 +89,15 @@ static void EmitDeclDestroy(CodeGenFunction &CGF, const VarDecl &D,
// 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.
- const CXXRecordDecl *record = nullptr;
- if (dtorKind == QualType::DK_cxx_destructor &&
- (record = type->getAsCXXRecordDecl()) &&
- (!CGM.getCXXABI().HasThisReturn(
- GlobalDecl(record->getDestructor(), Dtor_Complete)) ||
- !CGM.getCodeGenOpts().CXAAtExit)) {
- assert(!record->hasTrivialDestructor());
- CXXDestructorDecl *dtor = record->getDestructor();
+ 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)) {
+ assert(!Record->hasTrivialDestructor());
+ CXXDestructorDecl *dtor = Record->getDestructor();
function = CGM.getAddrOfCXXStructor(dtor, StructorType::Complete);
argument = llvm::ConstantExpr::getBitCast(
OpenPOWER on IntegriCloud