Author: arphaman Date: Thu Mar 16 11:36:11 2017 New Revision: 297961 URL: http://llvm.org/viewvc/llvm-project?rev=297961&view=rev Log: [ObjC][Sema] Avoid ARC performSelector error for 'self' selector
The instance method 'self' does not actually return an over-retained object, so we shouldn't report an error when it's used with 'performSelector'. rdar://31071620 Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp cfe/trunk/test/SemaObjC/arc-peformselector.m Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=297961&r1=297960&r2=297961&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original) +++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Thu Mar 16 11:36:11 2017 @@ -3010,7 +3010,6 @@ ExprResult Sema::BuildInstanceMessage(Ex case OMF_copy: case OMF_mutableCopy: case OMF_new: - case OMF_self: case OMF_init: // Issue error, unless ns_returns_not_retained. if (!SelMethod->hasAttr<NSReturnsNotRetainedAttr>()) { Modified: cfe/trunk/test/SemaObjC/arc-peformselector.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/arc-peformselector.m?rev=297961&r1=297960&r2=297961&view=diff ============================================================================== --- cfe/trunk/test/SemaObjC/arc-peformselector.m (original) +++ cfe/trunk/test/SemaObjC/arc-peformselector.m Thu Mar 16 11:36:11 2017 @@ -8,6 +8,7 @@ - (id) init __attribute__((ns_returns_not_retained)); - (id)PlusZero; - (id)PlusOne __attribute__((ns_returns_retained)); // expected-note {{method 'PlusOne' declared here}} +- (id)self; @end @interface I : NSObject @@ -31,6 +32,8 @@ return [self performSelector : @selector(PlusZero)]; return [self performSelector : @selector(PlusOne)]; // expected-error {{performSelector names a selector which retains the object}} + + return [self performSelector: @selector(self)]; // No error, -self is not +1! } - (id)performSelector:(SEL)aSelector { return 0; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits