mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
0556900b26
This occurs due to an alloca representing a separate ownership from the original pointer. Thus consider the following pseudo-IR: objc_retain(%a) for (...) { objc_retain(%a) %block <- %a F(%block) objc_release(%block) } objc_release(%a) From the perspective of the optimizer, the %block is a separate provenance from the original %a. Thus the optimizer pairs up the inner retain for %a and the outer release from %a, resulting in segfaults. This is fixed by noting that the signature of a mismatch of retain/releases inside the for loop is a Use/CanRelease top down with an None bottom up (since bottom up the Retain-CanRelease-Use-Release sequence is completed by the inner objc_retain, but top down due to the differing provenance from the objc_release said sequence is not completed). In said case in CheckForCFGHazards, we now clear the state of %a implying that no pairing will occur. Additionally a test case is included. rdar://12969722 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179747 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
apelim.ll | ||
arc-annotations.ll | ||
basic.ll | ||
cfg-hazards.ll | ||
clang-arc-used-intrinsic-removed-if-isolated.ll | ||
contract-marker.ll | ||
contract-storestrong-ivar.ll | ||
contract-storestrong.ll | ||
contract-testcases.ll | ||
contract.ll | ||
empty-block.ll | ||
ensure-that-exception-unwind-path-is-visited.ll | ||
escape.ll | ||
expand.ll | ||
gvn.ll | ||
intrinsic-use.ll | ||
invoke.ll | ||
lit.local.cfg | ||
move-and-form-retain-autorelease.ll | ||
move-and-merge-autorelease.ll | ||
nested.ll | ||
no-objc-arc-exceptions.ll | ||
path-overflow.ll | ||
pointer-types.ll | ||
post-inlining.ll | ||
pr12270.ll | ||
retain-block-alloca.ll | ||
retain-block-escape-analysis.ll | ||
retain-block-load.ll | ||
retain-block-side-effects.ll | ||
retain-block.ll | ||
retain-not-declared.ll | ||
rle-s2l.ll | ||
rv.ll | ||
split-backedge.ll | ||
tail-call-invariant-enforcement.ll | ||
weak-contract.ll | ||
weak-copies.ll | ||
weak-dce.ll | ||
weak.ll |