From 6fc559136b8ef98bfb824a0fd49df385405f2879 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Sun, 8 Feb 2009 03:22:36 +0000 Subject: 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 --- lib/CodeGen/CodeGenFunction.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'lib/CodeGen/CodeGenFunction.h') 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); } }; -- cgit v1.2.3-70-g09d2