1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -Wselector -verify -Wno-objc-root-class %s 2*67e74705SXin Li// rdar://8851684 3*67e74705SXin Li 4*67e74705SXin Li@interface Foo 5*67e74705SXin Li- (void) foo; 6*67e74705SXin Li- (void) bar; 7*67e74705SXin Li@end 8*67e74705SXin Li 9*67e74705SXin Li@implementation Foo 10*67e74705SXin Li- (void) bar 11*67e74705SXin Li{ 12*67e74705SXin Li} 13*67e74705SXin Li 14*67e74705SXin Li- (void) foo 15*67e74705SXin Li{ 16*67e74705SXin Li SEL a,b,c; 17*67e74705SXin Li a = @selector(b1ar); 18*67e74705SXin Li b = @selector(bar); 19*67e74705SXin Li} 20*67e74705SXin Li@end 21*67e74705SXin Li 22*67e74705SXin Li@interface I 23*67e74705SXin Li- length; 24*67e74705SXin Li@end 25*67e74705SXin Li 26*67e74705SXin LiSEL func() 27*67e74705SXin Li{ 28*67e74705SXin Li return @selector(length); // expected-warning {{no method with selector 'length' is implemented in this translation unit}} 29*67e74705SXin Li} 30*67e74705SXin Li 31*67e74705SXin Li// rdar://9545564 32*67e74705SXin Li@class MSPauseManager; 33*67e74705SXin Li 34*67e74705SXin Li@protocol MSPauseManagerDelegate 35*67e74705SXin Li@optional 36*67e74705SXin Li- (void)pauseManagerDidPause:(MSPauseManager *)manager; 37*67e74705SXin Li- (int)respondsToSelector:(SEL)aSelector; 38*67e74705SXin Li@end 39*67e74705SXin Li 40*67e74705SXin Li@interface MSPauseManager 41*67e74705SXin Li{ 42*67e74705SXin Li id<MSPauseManagerDelegate> _delegate; 43*67e74705SXin Li} 44*67e74705SXin Li@end 45*67e74705SXin Li 46*67e74705SXin Li 47*67e74705SXin Li@implementation MSPauseManager 48*67e74705SXin Li- (id) Meth { 49*67e74705SXin Li if ([_delegate respondsToSelector:@selector(pauseManagerDidPause:)]) 50*67e74705SXin Li return 0; 51*67e74705SXin Li return 0; 52*67e74705SXin Li} 53*67e74705SXin Li@end 54*67e74705SXin Li 55*67e74705SXin Li// rdar://12938616 56*67e74705SXin Li@class NSXPCConnection; 57*67e74705SXin Li 58*67e74705SXin Li@interface NSObject 59*67e74705SXin Li@end 60*67e74705SXin Li 61*67e74705SXin Li@interface INTF : NSObject 62*67e74705SXin Li{ 63*67e74705SXin Li NSXPCConnection *cnx; // Comes in as a parameter. 64*67e74705SXin Li} 65*67e74705SXin Li- (void) Meth; 66*67e74705SXin Li@end 67*67e74705SXin Li 68*67e74705SXin Liextern SEL MySelector(SEL s); 69*67e74705SXin Li 70*67e74705SXin Li@implementation INTF 71*67e74705SXin Li- (void) Meth { 72*67e74705SXin Li if( [cnx respondsToSelector:MySelector(@selector( _setQueue: ))] ) 73*67e74705SXin Li { 74*67e74705SXin Li } 75*67e74705SXin Li 76*67e74705SXin Li if( [cnx respondsToSelector:@selector( _setQueueXX: )] ) // No warning here. 77*67e74705SXin Li { 78*67e74705SXin Li } 79*67e74705SXin Li if( [cnx respondsToSelector:(@selector( _setQueueXX: ))] ) // No warning here. 80*67e74705SXin Li { 81*67e74705SXin Li } 82*67e74705SXin Li} 83*67e74705SXin Li@end 84*67e74705SXin Li 85*67e74705SXin Li// rdar://14007194 86*67e74705SXin Li@interface UxTechTest : NSObject 87*67e74705SXin Li- (int) invalidate : (id)Arg; 88*67e74705SXin Li+ (int) C_invalidate : (int)arg; 89*67e74705SXin Li@end 90*67e74705SXin Li 91*67e74705SXin Li@interface UxTechTest(CAT) 92*67e74705SXin Li- (char) invalidate : (int)arg; 93*67e74705SXin Li+ (int) C_invalidate : (char)arg; 94*67e74705SXin Li@end 95*67e74705SXin Li 96*67e74705SXin Li@interface NSPort : NSObject 97*67e74705SXin Li- (double) invalidate : (void*)Arg1; 98*67e74705SXin Li+ (int) C_invalidate : (id*)arg; 99*67e74705SXin Li@end 100*67e74705SXin Li 101*67e74705SXin Li 102*67e74705SXin Li@interface USEText : NSPort 103*67e74705SXin Li- (int) invalidate : (int)arg; 104*67e74705SXin Li@end 105*67e74705SXin Li 106*67e74705SXin Li@implementation USEText 107*67e74705SXin Li- (int) invalidate :(int) arg { return 0; } 108*67e74705SXin Li@end 109*67e74705SXin Li 110*67e74705SXin Li@interface USETextSub : USEText 111*67e74705SXin Li- (int) invalidate : (id)arg; 112*67e74705SXin Li@end 113*67e74705SXin Li 114*67e74705SXin Li// rdar://16428638 115*67e74705SXin Li@interface I16428638 116*67e74705SXin Li- (int) compare: (I16428638 *) arg1; // commenting out this line avoids the warning 117*67e74705SXin Li@end 118*67e74705SXin Li 119*67e74705SXin Li@interface J16428638 120*67e74705SXin Li- (int) compare: (J16428638 *) arg1; 121*67e74705SXin Li@end 122*67e74705SXin Li 123*67e74705SXin Li@implementation J16428638 124*67e74705SXin Li- (void)method { 125*67e74705SXin Li SEL s = @selector(compare:); // spurious warning 126*67e74705SXin Li (void)s; 127*67e74705SXin Li} 128*67e74705SXin Li- (int) compare: (J16428638 *) arg1 { 129*67e74705SXin Li return 0; 130*67e74705SXin Li} 131*67e74705SXin Li@end 132*67e74705SXin Li 133*67e74705SXin Livoid test16428638() { 134*67e74705SXin Li SEL s = @selector(compare:); 135*67e74705SXin Li (void)s; 136*67e74705SXin Li} 137*67e74705SXin Li 138*67e74705SXin Li// rdar://16607480 139*67e74705SXin Li@class NSString; 140*67e74705SXin Li@interface SELCanary : NSObject 141*67e74705SXin Li@property (readonly, nonatomic) NSString *name; 142*67e74705SXin Li@property (nonatomic, getter = isHidden) char hidden; 143*67e74705SXin Li@property (nonatomic, copy, getter = hasFish, setter = setFish:) NSString *ridiculousFish; 144*67e74705SXin Li@end 145*67e74705SXin Li 146*67e74705SXin Li@implementation SELCanary 147*67e74705SXin Li- (void) Meth { 148*67e74705SXin Li SEL properties[] = { 149*67e74705SXin Li @selector(name), 150*67e74705SXin Li @selector(isHidden), 151*67e74705SXin Li @selector(setHidden:), 152*67e74705SXin Li @selector(hasFish), 153*67e74705SXin Li @selector(setFish:) 154*67e74705SXin Li }; 155*67e74705SXin Li} 156*67e74705SXin Li@end 157*67e74705SXin Li 158