summaryrefslogtreecommitdiffstats
path: root/clang/lib/ARCMigrate
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-07-14 22:46:12 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-07-14 22:46:12 +0000
commit08903e4c167d1e8740c4df8f67f904e917fea8c2 (patch)
tree021d0bf28a1a317b9b7cfdacf6fa456661fe9d01 /clang/lib/ARCMigrate
parent5143181ff961706cd845c7e85f30f1fde2e5a03c (diff)
downloadbcm5719-llvm-08903e4c167d1e8740c4df8f67f904e917fea8c2.tar.gz
bcm5719-llvm-08903e4c167d1e8740c4df8f67f904e917fea8c2.zip
[arcmt] Allow -retain of an __unsafe_unretained receiver if the result gets used.
Keep the error if the result is unused. rdar://9552694. llvm-svn: 135209
Diffstat (limited to 'clang/lib/ARCMigrate')
-rw-r--r--clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp b/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
index d64250faf02..4eeb47437e3 100644
--- a/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
+++ b/clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
@@ -70,7 +70,8 @@ public:
if (E->getReceiverKind() == ObjCMessageExpr::Instance)
if (Expr *rec = E->getInstanceReceiver()) {
rec = rec->IgnoreParenImpCasts();
- if (rec->getType().getObjCLifetime() == Qualifiers::OCL_ExplicitNone){
+ if (rec->getType().getObjCLifetime() == Qualifiers::OCL_ExplicitNone &&
+ (E->getMethodFamily() != OMF_retain || isRemovable(E))) {
std::string err = "it is not safe to remove '";
err += E->getSelector().getAsString() + "' message on "
"an __unsafe_unretained type";
OpenPOWER on IntegriCloud