[llvm-commits] [llvm] r172599 - /llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp
Michael Gottesman
mgottesman at apple.com
Wed Jan 16 08:21:10 PST 2013
*note* I was tired when I committed this so I forgot to add a test case. I am going to do that later today and in that commit reference this commit and the pr this fixes.
On Jan 15, 2013, at 10:32 PM, Michael Gottesman <mgottesman at apple.com> wrote:
> Author: mgottesman
> Date: Wed Jan 16 00:32:39 2013
> New Revision: 172599
>
> URL: http://llvm.org/viewvc/llvm-project?rev=172599&view=rev
> Log:
> [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.
>
> Modified:
> llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp
>
> Modified: llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp?rev=172599&r1=172598&r2=172599&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/ObjCARC.cpp Wed Jan 16 00:32:39 2013
> @@ -2675,17 +2675,6 @@
> 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 @@
> 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 @@
> 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)) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list