llvm-project/llvm/lib/Transforms/ObjCARC
Akira Hatanaka 6fdcb3c2ce [ObjCARC] Do not move a release between a call and a
retainAutoreleasedReturnValue that retains the returned value.

This commit fixes a bug in ARC optimizer where it moves a release
between a call and a retainAutoreleasedReturnValue, causing the returned
object to be released before the retainAutoreleasedReturnValue can
retain it.

This commit accomplishes that by doing a lookahead and checking whether
the call prevents the release from moving upwards. In the long term, we
should treat the region between the retainAutoreleasedReturnValue and
the call as a critical section and disallow moving anything there
(possibly using operand bundles).

rdar://problem/20449878

llvm-svn: 301724
2017-04-29 00:23:11 +00:00
..
ARCRuntimeEntryPoints.h Rename AttributeSet to AttributeList 2017-03-21 16:57:19 +00:00
BlotMapVector.h Unify XDEBUG and EXPENSIVE_CHECKS (into the latter), and add an option to the cmake build to enable them. 2016-04-29 15:22:48 +00:00
CMakeLists.txt [CMake] NFC. Updating CMake dependency specifications 2016-11-17 04:36:50 +00:00
DependencyAnalysis.cpp
DependencyAnalysis.h Make more headers self-contained. 2016-01-27 18:03:37 +00:00
LLVMBuild.txt
ObjCARC.cpp [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
ObjCARC.h [ObjCARC] Do not move a release between a call and a 2017-04-29 00:23:11 +00:00
ObjCARCAPElim.cpp Re-commit optimization bisect support (r267022) without new pass manager support. 2016-04-22 22:06:11 +00:00
ObjCARCContract.cpp [ObjCArc] Do not dereference an invalidated iterator. 2017-04-05 03:44:09 +00:00
ObjCARCExpand.cpp [NFC] Header cleanup 2016-04-18 09:17:29 +00:00
ObjCARCOpts.cpp Remove redundant code. NFC. 2017-02-25 00:59:49 +00:00
ProvenanceAnalysis.cpp
ProvenanceAnalysis.h
ProvenanceAnalysisEvaluator.cpp
PtrState.cpp [ObjCARC] Do not move a release between a call and a 2017-04-29 00:23:11 +00:00
PtrState.h