diff options
Diffstat (limited to 'lib/CodeGen/CGBlocks.cpp')
-rw-r--r-- | lib/CodeGen/CGBlocks.cpp | 27 |
1 files changed, 1 insertions, 26 deletions
diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index e5871b27d4..0d05a62138 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -363,32 +363,7 @@ llvm::Value *CodeGenFunction::BuildBlockLiteralTmp(const BlockExpr *BE) { } else { if (BDRE->getCopyConstructorExpr()) { E = BDRE->getCopyConstructorExpr(); - // Code to destruct copy-constructed descriptor element for - // copied-in class object. - // TODO: Refactor this into common code with mostly similar - // CodeGenFunction::EmitLocalBlockVarDecl - QualType DtorTy = E->getType(); - if (const RecordType *RT = DtorTy->getAs<RecordType>()) - if (CXXRecordDecl *ClassDecl = - dyn_cast<CXXRecordDecl>(RT->getDecl())) { - if (!ClassDecl->hasTrivialDestructor()) { - const CXXDestructorDecl *D = ClassDecl->getDestructor(); - assert(D && "BuildBlockLiteralTmp - destructor is nul"); - { - // Normal destruction. - DelayedCleanupBlock Scope(*this); - EmitCXXDestructorCall(D, Dtor_Complete, - /*ForVirtualBase=*/false, Addr); - // Make sure to jump to the exit block. - EmitBranch(Scope.getCleanupExitBlock()); - } - if (Exceptions) { - EHCleanupBlock Cleanup(*this); - EmitCXXDestructorCall(D, Dtor_Complete, - /*ForVirtualBase=*/false, Addr); - } - } - } + PushDestructorCleanup(E->getType(), Addr); } else { E = new (getContext()) DeclRefExpr(const_cast<ValueDecl*>(VD), |