158 lines
2.7 KiB
Objective-C
158 lines
2.7 KiB
Objective-C
// RUN: %clang_cc1 -fsyntax-only -Wselector -verify -Wno-objc-root-class %s
|
|
// rdar://8851684
|
|
|
|
@interface Foo
|
|
- (void) foo;
|
|
- (void) bar;
|
|
@end
|
|
|
|
@implementation Foo
|
|
- (void) bar
|
|
{
|
|
}
|
|
|
|
- (void) foo
|
|
{
|
|
SEL a,b,c;
|
|
a = @selector(b1ar);
|
|
b = @selector(bar);
|
|
}
|
|
@end
|
|
|
|
@interface I
|
|
- length;
|
|
@end
|
|
|
|
SEL func()
|
|
{
|
|
return @selector(length); // expected-warning {{no method with selector 'length' is implemented in this translation unit}}
|
|
}
|
|
|
|
// rdar://9545564
|
|
@class MSPauseManager;
|
|
|
|
@protocol MSPauseManagerDelegate
|
|
@optional
|
|
- (void)pauseManagerDidPause:(MSPauseManager *)manager;
|
|
- (int)respondsToSelector:(SEL)aSelector;
|
|
@end
|
|
|
|
@interface MSPauseManager
|
|
{
|
|
id<MSPauseManagerDelegate> _delegate;
|
|
}
|
|
@end
|
|
|
|
|
|
@implementation MSPauseManager
|
|
- (id) Meth {
|
|
if ([_delegate respondsToSelector:@selector(pauseManagerDidPause:)])
|
|
return 0;
|
|
return 0;
|
|
}
|
|
@end
|
|
|
|
// rdar://12938616
|
|
@class NSXPCConnection;
|
|
|
|
@interface NSObject
|
|
@end
|
|
|
|
@interface INTF : NSObject
|
|
{
|
|
NSXPCConnection *cnx; // Comes in as a parameter.
|
|
}
|
|
- (void) Meth;
|
|
@end
|
|
|
|
extern SEL MySelector(SEL s);
|
|
|
|
@implementation INTF
|
|
- (void) Meth {
|
|
if( [cnx respondsToSelector:MySelector(@selector( _setQueue: ))] )
|
|
{
|
|
}
|
|
|
|
if( [cnx respondsToSelector:@selector( _setQueueXX: )] ) // No warning here.
|
|
{
|
|
}
|
|
if( [cnx respondsToSelector:(@selector( _setQueueXX: ))] ) // No warning here.
|
|
{
|
|
}
|
|
}
|
|
@end
|
|
|
|
// rdar://14007194
|
|
@interface UxTechTest : NSObject
|
|
- (int) invalidate : (id)Arg;
|
|
+ (int) C_invalidate : (int)arg;
|
|
@end
|
|
|
|
@interface UxTechTest(CAT)
|
|
- (char) invalidate : (int)arg;
|
|
+ (int) C_invalidate : (char)arg;
|
|
@end
|
|
|
|
@interface NSPort : NSObject
|
|
- (double) invalidate : (void*)Arg1;
|
|
+ (int) C_invalidate : (id*)arg;
|
|
@end
|
|
|
|
|
|
@interface USEText : NSPort
|
|
- (int) invalidate : (int)arg;
|
|
@end
|
|
|
|
@implementation USEText
|
|
- (int) invalidate :(int) arg { return 0; }
|
|
@end
|
|
|
|
@interface USETextSub : USEText
|
|
- (int) invalidate : (id)arg;
|
|
@end
|
|
|
|
// rdar://16428638
|
|
@interface I16428638
|
|
- (int) compare: (I16428638 *) arg1; // commenting out this line avoids the warning
|
|
@end
|
|
|
|
@interface J16428638
|
|
- (int) compare: (J16428638 *) arg1;
|
|
@end
|
|
|
|
@implementation J16428638
|
|
- (void)method {
|
|
SEL s = @selector(compare:); // spurious warning
|
|
(void)s;
|
|
}
|
|
- (int) compare: (J16428638 *) arg1 {
|
|
return 0;
|
|
}
|
|
@end
|
|
|
|
void test16428638() {
|
|
SEL s = @selector(compare:);
|
|
(void)s;
|
|
}
|
|
|
|
// rdar://16607480
|
|
@class NSString;
|
|
@interface SELCanary : NSObject
|
|
@property (readonly, nonatomic) NSString *name;
|
|
@property (nonatomic, getter = isHidden) char hidden;
|
|
@property (nonatomic, copy, getter = hasFish, setter = setFish:) NSString *ridiculousFish;
|
|
@end
|
|
|
|
@implementation SELCanary
|
|
- (void) Meth {
|
|
SEL properties[] = {
|
|
@selector(name),
|
|
@selector(isHidden),
|
|
@selector(setHidden:),
|
|
@selector(hasFish),
|
|
@selector(setFish:)
|
|
};
|
|
}
|
|
@end
|
|
|