Skip to content
Snippets Groups Projects
Commit 5a42a029 authored by Argyrios Kyrtzidis's avatar Argyrios Kyrtzidis
Browse files

[arcmt] Revert r156999 "Remove the "it is not safe to remove an unused 'autorelease' message" ARC

migration error".

Per feedback from John this is useful to have in general.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157198 91177308-0d34-0410-b5e6-96231b3b80d8
parent 5bf0e352
No related branches found
No related tags found
No related merge requests found
......@@ -63,6 +63,17 @@ 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)
......
......@@ -89,7 +89,8 @@ 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];
[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}}
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}} \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment