diff options
author | Mike Stump <mrs@apple.com> | 2009-10-01 00:27:30 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-10-01 00:27:30 +0000 |
commit | de8c5c77e27b6b0064c45d964ea8bcc2c853114d (patch) | |
tree | 95d8f48e1da9f191633dbe105087d13c1b756d9c /lib/CodeGen/CGBlocks.cpp | |
parent | 9aeed32282fe8a775c24c01c923717ca86695685 (diff) |
A couple of refinements for laying out debug information for
BlockDeclRefDecls.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83185 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGBlocks.cpp')
-rw-r--r-- | lib/CodeGen/CGBlocks.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index e9648251d2..ba14fea36e 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -665,21 +665,20 @@ CodeGenFunction::GenerateBlockFunction(const BlockExpr *BExpr, // Save a spot to insert the debug information for all the BlockDeclRefDecls. llvm::BasicBlock *entry = Builder.GetInsertBlock(); - llvm::BasicBlock::iterator entry_ptr = Builder.GetInsertPoint(); 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); if (CGDebugInfo *DI = getDebugInfo()) { - llvm::BasicBlock *end = Builder.GetInsertBlock(); - llvm::BasicBlock::iterator end_ptr = Builder.GetInsertPoint(); - // Emit debug information for all the BlockDeclRefDecls. - // First, go back to the entry... - Builder.SetInsertPoint(entry, entry_ptr); - - // And then insert the debug information.. for (unsigned i=0; i < BlockDeclRefDecls.size(); ++i) { const Expr *E = BlockDeclRefDecls[i]; const BlockDeclRefExpr *BDRE = dyn_cast<BlockDeclRefExpr>(E); @@ -691,10 +690,14 @@ CodeGenFunction::GenerateBlockFunction(const BlockExpr *BExpr, Builder, this); } } - - // Then go back to the end, and we're done. - Builder.SetInsertPoint(end, end_ptr); } + // And now go back to the body + EmitBlock(body); + // And resume where we left off. + if (resume == 0) + Builder.ClearInsertionPoint(); + else + Builder.SetInsertPoint(resume); FinishFunction(cast<CompoundStmt>(BExpr->getBody())->getRBracLoc()); |