aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Transforms/Scalar
diff options
context:
space:
mode:
authorMichael Gottesman <mgottesman@apple.com>2013-01-16 06:32:39 +0000
committerMichael Gottesman <mgottesman@apple.com>2013-01-16 06:32:39 +0000
commit09c84f13c6662e680f86e16f2474adf6177cf52f (patch)
treee0fcf773d98019069dd5195c86836adf9de61e67 /lib/Transforms/Scalar
parent457ee1a12e2c52624af7fdb81cf938f6d8d96572 (diff)
downloadexternal_llvm-09c84f13c6662e680f86e16f2474adf6177cf52f.zip
external_llvm-09c84f13c6662e680f86e16f2474adf6177cf52f.tar.gz
external_llvm-09c84f13c6662e680f86e16f2474adf6177cf52f.tar.bz2
[ObjCARC] Turn off ignoring unwind edges in ObjCARC when -fno-objc-arc-exception is enabled due to it's affect on correctness.
Specifically according to the semantics of ARC -fno-objc-arc-exception simply states that it is expected that the unwind path out of a call *MAY* not release objects. Thus we can have the situation where a release gets moved into a catch block which we ignore when we remove a retain/release pair resulting in (even though we assume the program is exiting anyways) the cleanup code path potentially blowing up before program exit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172599 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar')
-rw-r--r--lib/Transforms/Scalar/ObjCARC.cpp33
1 files changed, 0 insertions, 33 deletions
diff --git a/lib/Transforms/Scalar/ObjCARC.cpp b/lib/Transforms/Scalar/ObjCARC.cpp
index abd6b41..8da8726 100644
--- a/lib/Transforms/Scalar/ObjCARC.cpp
+++ b/lib/Transforms/Scalar/ObjCARC.cpp
@@ -2675,17 +2675,6 @@ ObjCARCOpt::CheckForCFGHazards(const BasicBlock *BB,
PtrState &S = I->second;
succ_const_iterator SI(TI), SE(TI, false);
- // If the terminator is an invoke marked with the
- // clang.arc.no_objc_arc_exceptions metadata, the unwind edge can be
- // ignored, for ARC purposes.
- if (isa<InvokeInst>(TI) && TI->getMetadata(NoObjCARCExceptionsMDKind)) {
- DEBUG(dbgs() << "ObjCARCOpt::CheckForCFGHazards: Found an invoke "
- "terminator marked with "
- "clang.arc.no_objc_arc_exceptions. Ignoring unwind "
- "edge.\n");
- --SE;
- }
-
for (; SI != SE; ++SI) {
Sequence SuccSSeq = S_None;
bool SuccSRRIKnownSafe = false;
@@ -2734,17 +2723,6 @@ ObjCARCOpt::CheckForCFGHazards(const BasicBlock *BB,
PtrState &S = I->second;
succ_const_iterator SI(TI), SE(TI, false);
- // If the terminator is an invoke marked with the
- // clang.arc.no_objc_arc_exceptions metadata, the unwind edge can be
- // ignored, for ARC purposes.
- if (isa<InvokeInst>(TI) && TI->getMetadata(NoObjCARCExceptionsMDKind)) {
- DEBUG(dbgs() << "ObjCARCOpt::CheckForCFGHazards: Found an invoke "
- "terminator marked with "
- "clang.arc.no_objc_arc_exceptions. Ignoring unwind "
- "edge.\n");
- --SE;
- }
-
for (; SI != SE; ++SI) {
Sequence SuccSSeq = S_None;
bool SuccSRRIKnownSafe = false;
@@ -3199,17 +3177,6 @@ ComputePostOrders(Function &F,
TerminatorInst *TI = cast<TerminatorInst>(&CurrBB->back());
succ_iterator SE(TI, false);
- // If the terminator is an invoke marked with the
- // clang.arc.no_objc_arc_exceptions metadata, the unwind edge can be
- // ignored, for ARC purposes.
- if (isa<InvokeInst>(TI) && TI->getMetadata(NoObjCARCExceptionsMDKind)) {
- DEBUG(dbgs() << "ObjCARCOpt::ComputePostOrders: Found an invoke "
- "terminator marked with "
- "clang.arc.no_objc_arc_exceptions. Ignoring unwind "
- "edge.\n");
- --SE;
- }
-
while (SuccStack.back().second != SE) {
BasicBlock *SuccBB = *SuccStack.back().second++;
if (Visited.insert(SuccBB)) {