Author: dschuff Date: Tue May 10 12:44:48 2016 New Revision: 269086 URL: http://llvm.org/viewvc/llvm-project?rev=269086&view=rev Log: Clean up condition, add ARM to test
Modified: cfe/trunk/lib/CodeGen/CGDeclCXX.cpp cfe/trunk/test/CodeGenCXX/static-destructor.cpp Modified: cfe/trunk/lib/CodeGen/CGDeclCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDeclCXX.cpp?rev=269086&r1=269085&r2=269086&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGDeclCXX.cpp (original) +++ cfe/trunk/lib/CodeGen/CGDeclCXX.cpp Tue May 10 12:44:48 2016 @@ -89,14 +89,15 @@ static void EmitDeclDestroy(CodeGenFunct // 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( Modified: cfe/trunk/test/CodeGenCXX/static-destructor.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/static-destructor.cpp?rev=269086&r1=269085&r2=269086&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/static-destructor.cpp (original) +++ cfe/trunk/test/CodeGenCXX/static-destructor.cpp Tue May 10 12:44:48 2016 @@ -1,5 +1,6 @@ // RUN: %clang_cc1 %s -triple=x86_64-pc-linux -emit-llvm -o - | FileCheck --check-prefix=X86 %s // RUN: %clang_cc1 %s -triple=wasm32 -emit-llvm -o - | FileCheck --check-prefix=WASM %s +// RUN: %clang_cc1 %s -triple=armv7-apple-darwin9 -emit-llvm -o - | FileCheck --check-prefix=WASM %s // Test that destructors are not passed directly to __cxa_atexit when their // signatures do not match the type of its first argument. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits