diff options
author | Anders Carlsson <andersca@mac.com> | 2009-02-08 03:22:36 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-02-08 03:22:36 +0000 |
commit | 6fc559136b8ef98bfb824a0fd49df385405f2879 (patch) | |
tree | 246104138441932e4d73fd93ca31d34abbc931c0 /lib/CodeGen | |
parent | 1093c2c40a7c262d206d724e912b32cbad2d4e14 (diff) |
CleanupScope needs to push the cleanup block in its destructor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64068 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/CodeGenFunction.cpp | 6 | ||||
-rw-r--r-- | lib/CodeGen/CodeGenFunction.h | 14 |
2 files changed, 9 insertions, 11 deletions
diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp index 4b3ab2de19..e9bcfb51dc 100644 --- a/lib/CodeGen/CodeGenFunction.cpp +++ b/lib/CodeGen/CodeGenFunction.cpp @@ -517,13 +517,9 @@ llvm::Value* CodeGenFunction::EmitVAListRef(const Expr* E) { return EmitLValue(E).getAddress(); } -llvm::BasicBlock *CodeGenFunction::CreateCleanupBlock() +void CodeGenFunction::PushCleanupBlock(llvm::BasicBlock *CleanupBlock) { - llvm::BasicBlock *CleanupBlock = createBasicBlock("cleanup"); - CleanupEntries.push_back(CleanupEntry(CleanupBlock)); - - return CleanupBlock; } void CodeGenFunction::EmitCleanupBlocks(size_t OldCleanupStackSize) diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index b37cf7b919..9eae28ca2a 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -128,25 +128,27 @@ public: void EmitJumpThroughFinally(ObjCEHEntry *Entry, llvm::BasicBlock *Dest, bool ExecuteTryExit=true); - /// CreateCleanupBlock - Will push a new cleanup entry on the stack - /// and return a BasicBlock where cleanup instructions can be added - llvm::BasicBlock *CreateCleanupBlock(); + /// PushCleanupBlock - Push a new cleanup entry on the stack and set the + /// passed in block as the cleanup block. + void PushCleanupBlock(llvm::BasicBlock *CleanupBlock); /// CleanupScope - RAII object that will create a cleanup block and /// set the insert point to that block. When destructed, it sets the insert - /// point to the previous block. + /// point to the previous block and pushes a new cleanup entry on the stack. class CleanupScope { CodeGenFunction& CGF; llvm::BasicBlock *CurBB; + llvm::BasicBlock *CleanupBB; public: CleanupScope(CodeGenFunction &cgf) : CGF(cgf), CurBB(CGF.Builder.GetInsertBlock()) { - llvm::BasicBlock *FinallyBB = CGF.CreateCleanupBlock(); - CGF.Builder.SetInsertPoint(FinallyBB); + CleanupBB = CGF.createBasicBlock("cleanup"); + CGF.Builder.SetInsertPoint(CleanupBB); } ~CleanupScope() { + CGF.PushCleanupBlock(CleanupBB); CGF.Builder.SetInsertPoint(CurBB); } }; |