aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGObjCMac.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-02-08 22:25:30 +0000
committerAnders Carlsson <andersca@mac.com>2009-02-08 22:25:30 +0000
commit48de1012a2d8525362b417efce6fbfdf1c2b36e1 (patch)
treeb651aa12224d81bd498f3137a301f7f70411dbee /lib/CodeGen/CGObjCMac.cpp
parent46831a93e1805ddaebd68f37cdb5496a86b44cf0 (diff)
Add a simplified EmitJumpThroughFinally and use it in CGObjC in preparation of making it use the cleanup stack.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64098 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGObjCMac.cpp')
-rw-r--r--lib/CodeGen/CGObjCMac.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index ba2f5262fd..aad569aace 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -1904,7 +1904,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
CGF.EmitBlock(TryBlock);
CGF.EmitStmt(isTry ? cast<ObjCAtTryStmt>(S).getTryBody()
: cast<ObjCAtSynchronizedStmt>(S).getSynchBody());
- CGF.EmitJumpThroughFinally(&EHEntry, FinallyEnd);
+ CGF.EmitJumpThroughFinally(FinallyEnd);
// Emit the "exception in @try" block.
CGF.EmitBlock(TryHandler);
@@ -1919,7 +1919,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
{
CGF.Builder.CreateStore(Caught, RethrowPtr);
CGF.Builder.CreateStore(llvm::ConstantInt::getFalse(), CallTryExitPtr);
- CGF.EmitJumpThroughFinally(&EHEntry, FinallyRethrow, false);
+ CGF.EmitJumpThroughFinally(FinallyRethrow);
}
else if (const ObjCAtCatchStmt* CatchStmt =
cast<ObjCAtTryStmt>(S).getCatchStmts())
@@ -1973,7 +1973,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
}
CGF.EmitStmt(CatchStmt->getCatchBody());
- CGF.EmitJumpThroughFinally(&EHEntry, FinallyEnd);
+ CGF.EmitJumpThroughFinally(FinallyEnd);
break;
}
@@ -2004,7 +2004,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
CGF.Builder.CreateStore(Tmp, CGF.GetAddrOfLocalVar(VD));
CGF.EmitStmt(CatchStmt->getCatchBody());
- CGF.EmitJumpThroughFinally(&EHEntry, FinallyEnd);
+ CGF.EmitJumpThroughFinally(FinallyEnd);
CGF.EmitBlock(NextCatchBlock);
}
@@ -2013,7 +2013,7 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
// None of the handlers caught the exception, so store it to be
// rethrown at the end of the @finally block.
CGF.Builder.CreateStore(Caught, RethrowPtr);
- CGF.EmitJumpThroughFinally(&EHEntry, FinallyRethrow);
+ CGF.EmitJumpThroughFinally(FinallyRethrow);
}
// Emit the exception handler for the @catch blocks.
@@ -2022,11 +2022,11 @@ void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
ExceptionData),
RethrowPtr);
CGF.Builder.CreateStore(llvm::ConstantInt::getFalse(), CallTryExitPtr);
- CGF.EmitJumpThroughFinally(&EHEntry, FinallyRethrow, false);
+ CGF.EmitJumpThroughFinally(FinallyRethrow);
} else {
CGF.Builder.CreateStore(Caught, RethrowPtr);
CGF.Builder.CreateStore(llvm::ConstantInt::getFalse(), CallTryExitPtr);
- CGF.EmitJumpThroughFinally(&EHEntry, FinallyRethrow, false);
+ CGF.EmitJumpThroughFinally(FinallyRethrow);
}
// Pop the exception-handling stack entry. It is important to do
@@ -2090,9 +2090,12 @@ void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
CGF.Builder.ClearInsertionPoint();
}
+void CodeGenFunction::EmitJumpThroughFinally(llvm::BasicBlock *Dest) {
+ EmitJumpThroughFinally(ObjCEHStack.back(), Dest);
+}
+
void CodeGenFunction::EmitJumpThroughFinally(ObjCEHEntry *E,
- llvm::BasicBlock *Dst,
- bool ExecuteTryExit) {
+ llvm::BasicBlock *Dst) {
if (!HaveInsertPoint())
return;