summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanaka@apple.com>2019-04-10 06:20:20 +0000
committerAkira Hatanaka <ahatanaka@apple.com>2019-04-10 06:20:20 +0000
commit9ca9d32b6be038debc6fda9c16a5f95b59e9b806 (patch)
tree1c85ba4ddb65ada984e304eb1ec9f928134a7412 /llvm/lib/Transforms
parent391d5caa106007daaa1ae0bf8214f9020f40a8b5 (diff)
downloadbcm5719-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.cpp11
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;
}
OpenPOWER on IntegriCloud