Add a simple RAII object, to be used for pushing a cleanup entry and make the insertion point be the cleanup block.

llvm-svn: 64048
This commit is contained in:
Anders Carlsson 2009-02-07 23:30:41 +00:00
parent 723f55d697
commit 2cf8c44e43
1 changed files with 19 additions and 0 deletions

View File

@ -132,6 +132,25 @@ public:
/// and return a BasicBlock where cleanup instructions can be added
llvm::BasicBlock *CreateCleanupBlock();
/// 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.
class CleanupScope {
CodeGenFunction& CGF;
llvm::BasicBlock *CurBB;
public:
CleanupScope(CodeGenFunction &cgf)
: CGF(cgf), CurBB(CGF.Builder.GetInsertBlock()) {
llvm::BasicBlock *FinallyBB = CGF.CreateCleanupBlock();
CGF.Builder.SetInsertPoint(FinallyBB);
}
~CleanupScope() {
CGF.Builder.SetInsertPoint(CurBB);
}
};
private:
/// LabelIDs - Track arbitrary ids assigned to labels for use in
/// implementing the GCC address-of-label extension and indirect