diff options
Diffstat (limited to 'lib/CodeGen/CGBlocks.cpp')
-rw-r--r-- | lib/CodeGen/CGBlocks.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index ba14fea36e..79950e8c6b 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -663,20 +663,23 @@ CodeGenFunction::GenerateBlockFunction(const BlockExpr *BExpr, StartFunction(BD, ResultType, Fn, Args, BExpr->getBody()->getLocEnd()); + CurFuncDecl = OuterFuncDecl; + CurCodeDecl = BD; + // Save a spot to insert the debug information for all the BlockDeclRefDecls. llvm::BasicBlock *entry = Builder.GetInsertBlock(); + llvm::BasicBlock::iterator entry_ptr = Builder.GetInsertPoint(); + --entry_ptr; - CurFuncDecl = OuterFuncDecl; - CurCodeDecl = BD; - // FIXME: Can we straighten this out not using multiple basic blocks? - // Set body aside for now. - llvm::BasicBlock *body = createBasicBlock("body"); - Builder.SetInsertPoint(body); EmitStmt(BExpr->getBody()); + // Remember where we were... llvm::BasicBlock *resume = Builder.GetInsertBlock(); + // Go back to the entry. - Builder.SetInsertPoint(entry); + ++entry_ptr; + Builder.SetInsertPoint(entry, entry_ptr); + if (CGDebugInfo *DI = getDebugInfo()) { // Emit debug information for all the BlockDeclRefDecls. for (unsigned i=0; i < BlockDeclRefDecls.size(); ++i) { @@ -691,8 +694,6 @@ CodeGenFunction::GenerateBlockFunction(const BlockExpr *BExpr, } } } - // And now go back to the body - EmitBlock(body); // And resume where we left off. if (resume == 0) Builder.ClearInsertionPoint(); |