Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / SemaObjC / selector-3.m
blob02bbf616ac1fbf1bc9c17c340ccdeec04b5ca0ef
1 // RUN: %clang_cc1  -fsyntax-only -Wselector -verify -Wno-objc-root-class %s
3 @interface Foo
4 - (void) foo;
5 - (void) bar;
6 @end
8 @implementation Foo
9 - (void) bar
13 - (void) foo
15   SEL a,b,c;
16   a = @selector(b1ar);
17   b = @selector(bar);
19 @end
21 @interface I
22 - length;
23 @end
25 SEL func(void)
27     return  @selector(length);  // expected-warning {{no method with selector 'length' is implemented in this translation unit}}
30 @class MSPauseManager;
32 @protocol MSPauseManagerDelegate 
33 @optional
34 - (void)pauseManagerDidPause:(MSPauseManager *)manager;
35 - (int)respondsToSelector:(SEL)aSelector;
36 @end
38 @interface MSPauseManager
40   id<MSPauseManagerDelegate> _delegate;
42 @end
45 @implementation MSPauseManager
46 - (id) Meth {
47   if ([_delegate respondsToSelector:@selector(pauseManagerDidPause:)])
48     return 0;
49   return 0;
51 @end
53 @class NSXPCConnection;
55 @interface NSObject
56 @end
58 @interface INTF : NSObject
60   NSXPCConnection *cnx; // Comes in as a parameter.
62 - (void) Meth;
63 @end
65 extern SEL MySelector(SEL s);
67 @implementation INTF
68 - (void) Meth {
69   if( [cnx respondsToSelector:MySelector(@selector( _setQueue: ))] )
70   {
71   }
73   if( [cnx respondsToSelector:@selector( _setQueueXX: )] ) // No warning here.
74   {
75   }
76   if( [cnx respondsToSelector:(@selector( _setQueueXX: ))] ) // No warning here.
77   {
78   }
80 @end
82 @interface UxTechTest : NSObject
83 - (int) invalidate : (id)Arg;
84 + (int) C_invalidate : (int)arg;
85 @end
87 @interface UxTechTest(CAT)
88 - (char) invalidate : (int)arg;
89 + (int) C_invalidate : (char)arg;
90 @end
92 @interface NSPort : NSObject
93 - (double) invalidate : (void*)Arg1;
94 + (int) C_invalidate : (id*)arg;
95 @end
98 @interface USEText : NSPort
99 - (int) invalidate : (int)arg;
100 @end
102 @implementation USEText
103 - (int) invalidate :(int) arg { return 0; }
104 @end
106 @interface USETextSub : USEText
107 - (int) invalidate : (id)arg;
108 @end
110 @interface I16428638
111 - (int) compare: (I16428638 *) arg1; // commenting out this line avoids the warning
112 @end
114 @interface J16428638
115 - (int) compare: (J16428638 *) arg1;
116 @end
118 @implementation J16428638
119 - (void)method {
120     SEL s = @selector(compare:); // spurious warning
121     (void)s;
123 - (int) compare: (J16428638 *) arg1 {
124     return 0;
126 @end
128 void test16428638(void) {
129     SEL s = @selector(compare:);
130     (void)s;
133 @class NSString;
134 @interface SELCanary : NSObject
135 @property (readonly, nonatomic) NSString *name;
136 @property (nonatomic, getter = isHidden) char hidden;
137 @property (nonatomic, copy, getter = hasFish, setter = setFish:) NSString *ridiculousFish;
138 @end
140 @implementation SELCanary
141 - (void) Meth {
142  SEL properties[] = {
143   @selector(name),
144   @selector(isHidden),
145   @selector(setHidden:),
146   @selector(hasFish),
147   @selector(setFish:)
148  };
150 @end