Author: akirtzidis
Date: Thu May 17 13:16:05 2012
New Revision: 156999
URL: http://llvm.org/viewvc/llvm-project?rev=156999&view=rev
Log:
[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
Modified:
cfe/trunk/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
cfe/trunk/test/ARCMT/checking.m
Modified: cfe/trunk/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/TransRetainReleaseDealloc.cpp?rev=156999&r1=156998&r2=156999&view=diff
==============================================================================
--- cfe/trunk/lib/ARCMigrate/TransRetainReleaseDealloc.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/TransRetainReleaseDealloc.cpp Thu May 17 13:16:05
2012
@@ -63,17 +63,6 @@
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)
Modified: cfe/trunk/test/ARCMT/checking.m
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/checking.m?rev=156999&r1=156998&r2=156999&view=diff
==============================================================================
--- cfe/trunk/test/ARCMT/checking.m (original)
+++ cfe/trunk/test/ARCMT/checking.m Thu May 17 13:16:05 2012
@@ -89,8 +89,7 @@
[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}} \
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits