forked from OSchip/llvm-project
c6f1713c46
a tail call This reapplies the patch in https://reviews.llvm.org/rG1f5b471b8bf4, which was reverted because it was causing crashes. https://bugs.chromium.org/p/chromium/issues/detail?id=1061289#c2 Check that HasSafePathToCall is true before checking the call is a tail call. Original commit message: Previosly ARC optimizer removed the autoreleaseRV/retainRV pair in the following code, which caused the object returned by @something to be placed in the autorelease pool because the call to @something isn't a tail call: ``` %call = call i8* @something(...) %2 = call i8* @objc_retainAutoreleasedReturnValue(i8* %call) %3 = call i8* @objc_autoreleaseReturnValue(i8* %2) ret i8* %3 ``` Fix the bug by checking whether @something is a tail call. rdar://problem/59275894 |
||
---|---|---|
.. | ||
ARCRuntimeEntryPoints.h | ||
BlotMapVector.h | ||
CMakeLists.txt | ||
DependencyAnalysis.cpp | ||
DependencyAnalysis.h | ||
LLVMBuild.txt | ||
ObjCARC.cpp | ||
ObjCARC.h | ||
ObjCARCAPElim.cpp | ||
ObjCARCContract.cpp | ||
ObjCARCExpand.cpp | ||
ObjCARCOpts.cpp | ||
ProvenanceAnalysis.cpp | ||
ProvenanceAnalysis.h | ||
ProvenanceAnalysisEvaluator.cpp | ||
PtrState.cpp | ||
PtrState.h |