diff options
Diffstat (limited to 'lib/CodeGen/CodeGenFunction.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenFunction.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp index b62499d3ad..4ae8708054 100644 --- a/lib/CodeGen/CodeGenFunction.cpp +++ b/lib/CodeGen/CodeGenFunction.cpp @@ -586,7 +586,11 @@ CodeGenFunction::CleanupBlockInfo CodeGenFunction::PopCleanupBlock() llvm::SwitchInst *SI = Builder.CreateSwitch(DestCode, EndBlock, BranchFixups.size()); - Builder.SetInsertPoint(CurBB); + // Restore the current basic block (if any) + if (CurBB) + Builder.SetInsertPoint(CurBB); + else + Builder.ClearInsertionPoint(); for (size_t i = 0, e = BranchFixups.size(); i != e; ++i) { llvm::BranchInst *BI = BranchFixups[i]; @@ -658,8 +662,13 @@ void CodeGenFunction::AddBranchFixup(llvm::BranchInst *BI) void CodeGenFunction::EmitBranchThroughCleanup(llvm::BasicBlock *Dest) { + if (!HaveInsertPoint()) + return; + llvm::BranchInst* BI = Builder.CreateBr(Dest); + Builder.ClearInsertionPoint(); + // The stack is empty, no need to do any cleanup. if (CleanupEntries.empty()) return; |