diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2019-04-10 06:20:20 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2019-04-10 06:20:20 +0000 |
commit | 9ca9d32b6be038debc6fda9c16a5f95b59e9b806 (patch) | |
tree | 1c85ba4ddb65ada984e304eb1ec9f928134a7412 /llvm/lib/Transforms | |
parent | 391d5caa106007daaa1ae0bf8214f9020f40a8b5 (diff) | |
download | bcm5719-llvm-9ca9d32b6be038debc6fda9c16a5f95b59e9b806.tar.gz bcm5719-llvm-9ca9d32b6be038debc6fda9c16a5f95b59e9b806.zip |
[ObjC][ARC] Convert the retainRV marker that is passed as a named
metadata into a module flag in the auto-upgrader and make the ARC
contract pass read the marker as a module flag.
This is needed to fix a bug where ARC contract wasn't inserting the
retainRV marker when LTO was enabled, which caused objects returned
from a function to be auto-released.
rdar://problem/49464214
Differential Revision: https://reviews.llvm.org/D60303
llvm-svn: 358047
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp b/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp index 6613f6a76d0..ff07cfe00d4 100644 --- a/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp +++ b/llvm/lib/Transforms/ObjCARC/ObjCARCContract.cpp @@ -744,15 +744,8 @@ bool ObjCARCContract::doInitialization(Module &M) { EP.init(&M); // Initialize RVInstMarker. - RVInstMarker = nullptr; - if (NamedMDNode *NMD = - M.getNamedMetadata("clang.arc.retainAutoreleasedReturnValueMarker")) - if (NMD->getNumOperands() == 1) { - const MDNode *N = NMD->getOperand(0); - if (N->getNumOperands() == 1) - if (const MDString *S = dyn_cast<MDString>(N->getOperand(0))) - RVInstMarker = S; - } + const char *MarkerKey = "clang.arc.retainAutoreleasedReturnValueMarker"; + RVInstMarker = dyn_cast_or_null<MDString>(M.getModuleFlag(MarkerKey)); return false; } |