xref: /aosp_15_r20/external/clang/test/SemaObjC/selector-3.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
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