aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-05-17 18:16:05 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2012-05-17 18:16:05 +0000
commitb6a1b10a8d9e0405b7a0d12273623c7f4d23f7d9 (patch)
tree9cbdb3e8fbe67f381059824408cce43e9ba964fa
parenteecb22b916b6bd19655515d59a01ebd0dad37ab6 (diff)
[arcmt] Remove the "it is not safe to remove an unused 'autorelease' message" ARC
migration error. This is more trouble that it is worth; autoreleasing a value without holding on it is a valid use-case, we should not "punish" correct code for the minority of broken/fragile programs that depend on the behavior of -autorelease. rdar://9914061 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156999 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/ARCMigrate/TransRetainReleaseDealloc.cpp11
-rw-r--r--test/ARCMT/checking.m3
2 files changed, 1 insertions, 13 deletions
diff --git a/lib/ARCMigrate/TransRetainReleaseDealloc.cpp b/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
index 11a6553341..976c097356 100644
--- a/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
+++ b/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
@@ -63,17 +63,6 @@ public:
break;
return true;
case OMF_autorelease:
- if (isRemovable(E)) {
- // An unused autorelease is badness. If we remove it the receiver
- // will likely die immediately while previously it was kept alive
- // by the autorelease pool. This is bad practice in general, leave it
- // and emit an error to force the user to restructure his code.
- Pass.TA.reportError("it is not safe to remove an unused 'autorelease' "
- "message; its receiver may be destroyed immediately",
- E->getLocStart(), E->getSourceRange());
- return true;
- }
- // Pass through.
case OMF_retain:
case OMF_release:
if (E->getReceiverKind() == ObjCMessageExpr::Instance)
diff --git a/test/ARCMT/checking.m b/test/ARCMT/checking.m
index cf7161187f..73eba9fc7b 100644
--- a/test/ARCMT/checking.m
+++ b/test/ARCMT/checking.m
@@ -89,8 +89,7 @@ void test1(A *a, BOOL b, struct UnsafeS *unsafeS) {
[a retain];
[a retainCount]; // expected-error {{ARC forbids explicit message send of 'retainCount'}}
[a release];
- [a autorelease]; // expected-error {{it is not safe to remove an unused 'autorelease' message; its receiver may be destroyed immediately}} \
- // expected-error {{ARC forbids explicit message send}}
+ [a autorelease];
CFStringRef cfstr;
NSString *str = (NSString *)cfstr; // expected-error {{cast of C pointer type 'CFStringRef' (aka 'const struct __CFString *') to Objective-C pointer type 'NSString *' requires a bridged cast}} \