blob: 80332ec0d4744a0685c2f6500b11a672dcad0f00 [file] [log] [blame]
Patrick Beardacfbe9e2012-04-06 18:12:22 +00001// RUN: %clang_cc1 -fsyntax-only -Wselector -verify -Wno-objc-root-class %s
Fariborz Jahaniana533af72011-02-04 23:30:23 +00002// rdar://8851684
3
4@interface Foo
5- (void) foo;
6- (void) bar;
7@end
8
9@implementation Foo
10- (void) bar
11{
12}
13
14- (void) foo
15{
16 SEL a,b,c;
Fariborz Jahanian65a78b52014-05-09 19:51:39 +000017 a = @selector(b1ar);
Fariborz Jahaniana533af72011-02-04 23:30:23 +000018 b = @selector(bar);
19}
20@end
21
22@interface I
23- length;
24@end
25
26SEL func()
27{
Fariborz Jahanianbae1bcb2014-01-15 00:59:25 +000028 return @selector(length); // expected-warning {{no method with selector 'length' is implemented in this translation unit}}
Fariborz Jahaniana533af72011-02-04 23:30:23 +000029}
Fariborz Jahanian9a881012011-07-13 19:05:43 +000030
31// rdar://9545564
32@class MSPauseManager;
33
34@protocol MSPauseManagerDelegate
35@optional
36- (void)pauseManagerDidPause:(MSPauseManager *)manager;
37- (int)respondsToSelector:(SEL)aSelector;
38@end
39
40@interface MSPauseManager
41{
42 id<MSPauseManagerDelegate> _delegate;
43}
44@end
45
46
47@implementation MSPauseManager
48- (id) Meth {
49 if ([_delegate respondsToSelector:@selector(pauseManagerDidPause:)])
50 return 0;
51 return 0;
52}
53@end
54
Fariborz Jahanian60ccb9b2013-01-21 22:32:29 +000055// rdar://12938616
56@class NSXPCConnection;
57
58@interface NSObject
59@end
60
61@interface INTF : NSObject
62{
63 NSXPCConnection *cnx; // Comes in as a parameter.
64}
65- (void) Meth;
66@end
67
68extern SEL MySelector(SEL s);
69
70@implementation INTF
71- (void) Meth {
Fariborz Jahanian65a78b52014-05-09 19:51:39 +000072 if( [cnx respondsToSelector:MySelector(@selector( _setQueue: ))] )
Fariborz Jahanian60ccb9b2013-01-21 22:32:29 +000073 {
74 }
75
76 if( [cnx respondsToSelector:@selector( _setQueueXX: )] ) // No warning here.
77 {
78 }
Fariborz Jahanian02447d82013-01-22 18:35:43 +000079 if( [cnx respondsToSelector:(@selector( _setQueueXX: ))] ) // No warning here.
80 {
81 }
Fariborz Jahanian60ccb9b2013-01-21 22:32:29 +000082}
83@end
Fariborz Jahanian42f89382013-05-30 21:48:58 +000084
85// rdar://14007194
86@interface UxTechTest : NSObject
Fariborz Jahanian26cb6d92014-01-10 19:27:21 +000087- (int) invalidate : (id)Arg;
88+ (int) C_invalidate : (int)arg;
Fariborz Jahanian42f89382013-05-30 21:48:58 +000089@end
90
91@interface UxTechTest(CAT)
Fariborz Jahanian26cb6d92014-01-10 19:27:21 +000092- (char) invalidate : (int)arg;
93+ (int) C_invalidate : (char)arg;
Fariborz Jahanian42f89382013-05-30 21:48:58 +000094@end
95
96@interface NSPort : NSObject
Fariborz Jahanian26cb6d92014-01-10 19:27:21 +000097- (double) invalidate : (void*)Arg1;
98+ (int) C_invalidate : (id*)arg;
Fariborz Jahanian42f89382013-05-30 21:48:58 +000099@end
100
101
102@interface USEText : NSPort
Fariborz Jahanian26cb6d92014-01-10 19:27:21 +0000103- (int) invalidate : (int)arg;
Fariborz Jahanian42f89382013-05-30 21:48:58 +0000104@end
105
106@implementation USEText
107- (int) invalidate :(int) arg { return 0; }
108@end
109
110@interface USETextSub : USEText
111- (int) invalidate : (id)arg;
112@end
Fariborz Jahanianec762bd2014-03-26 20:59:26 +0000113
114// rdar://16428638
115@interface I16428638
116- (int) compare: (I16428638 *) arg1; // commenting out this line avoids the warning
117@end
118
119@interface J16428638
120- (int) compare: (J16428638 *) arg1;
121@end
122
123@implementation J16428638
124- (void)method {
125 SEL s = @selector(compare:); // spurious warning
126 (void)s;
127}
128- (int) compare: (J16428638 *) arg1 {
129 return 0;
130}
131@end
132
133void test16428638() {
134 SEL s = @selector(compare:);
135 (void)s;
136}
Fariborz Jahanian4019c7f2015-02-19 21:52:41 +0000137
138// rdar://16607480
139@class NSString;
140@interface SELCanary : NSObject
141@property (readonly, nonatomic) NSString *name;
142@property (nonatomic, getter = isHidden) char hidden;
143@property (nonatomic, copy, getter = hasFish, setter = setFish:) NSString *ridiculousFish;
144@end
145
146@implementation SELCanary
147- (void) Meth {
148 SEL properties[] = {
149 @selector(name),
150 @selector(isHidden),
151 @selector(setHidden:),
152 @selector(hasFish),
153 @selector(setFish:)
154 };
155}
156@end
157