Add support for emitting cleanup blocks. Make EmitCompoundStatement emit cleanup blocks if necessary

llvm-svn: 64051
This commit is contained in:
Anders Carlsson
2009-02-07 23:50:39 +00:00
parent 4f8542f31d
commit be0f76a712
3 changed files with 34 additions and 1 deletions

View File

@@ -521,3 +521,24 @@ llvm::BasicBlock *CodeGenFunction::CreateCleanupBlock()
return CleanupBlock;
}
void CodeGenFunction::EmitCleanupBlocks(size_t OldCleanupStackSize)
{
assert(CleanupEntries.size() >= OldCleanupStackSize &&
"Cleanup stack mismatch!");
while (CleanupEntries.size() > OldCleanupStackSize)
EmitCleanupBlock();
}
void CodeGenFunction::EmitCleanupBlock()
{
CleanupEntry &CE = CleanupEntries.back();
llvm::BasicBlock *CleanupBlock = CE.CleanupBlock;
CleanupEntries.pop_back();
EmitBlock(CleanupBlock);
}