teak-llvm/clang/test/SemaObjC/selector-1.m
Fariborz Jahanian dacffc0d8d Objective-C. When we use @selector(save:), etc. there may be more
than one method with mismatched type of same selector name. 
clang issues a warning to point this out since it may cause 
undefined behavior. There are cases though that some APIs 
don't care about user methods and such warnings are perceived as 
noise. This patch allows users to add paren delimiters around
selector name to turn off such warnings. So, @selector((save:)) will
turn off the warning. It also provides 'fixit' so user knows 
what to do. // rdar://16458579

llvm-svn: 211611
2014-06-24 17:02:19 +00:00

64 lines
1.8 KiB
Objective-C

// RUN: %clang_cc1 -Wselector-type-mismatch -verify %s
@interface I
- (id) compare: (char) arg1; // expected-note {{method 'compare:' declared here}}
- length;
@end
@interface J
- (id) compare: (id) arg1; // expected-note {{method 'compare:' declared here}}
@end
SEL func()
{
return @selector(compare:); // expected-warning {{several methods with selector 'compare:' of mismatched types are found for the @selector expression}}
}
// rdar://16458579
void Test16458579() {
SEL s = @selector((retain));
SEL s1 = @selector((meth1:));
SEL s2 = @selector((retainArgument::));
SEL s3 = @selector((retainArgument:::::));
SEL s4 = @selector((retainArgument:with:));
SEL s5 = @selector((meth1:with:with:));
SEL s6 = @selector((getEnum:enum:bool:));
SEL s7 = @selector((char:float:double:unsigned:short:long:));
SEL s9 = @selector((:enum:bool:));
}
int main() {
SEL s = @selector(retain);
SEL s1 = @selector(meth1:);
SEL s2 = @selector(retainArgument::);
SEL s3 = @selector(retainArgument:::::);
SEL s4 = @selector(retainArgument:with:);
SEL s5 = @selector(meth1:with:with:);
SEL s6 = @selector(getEnum:enum:bool:);
SEL s7 = @selector(char:float:double:unsigned:short:long:);
SEL s9 = @selector(:enum:bool:);
}
// rdar://15794055
@interface NSObject @end
@class NSNumber;
@interface XBRecipe : NSObject
@property (nonatomic, assign) float finalVolume; // expected-note {{method 'setFinalVolume:' declared here}}
@end
@interface XBDocument : NSObject
@end
@interface XBDocument ()
- (void)setFinalVolume:(NSNumber *)finalVolumeNumber; // expected-note {{method 'setFinalVolume:' declared here}}
@end
@implementation XBDocument
- (void)setFinalVolume:(NSNumber *)finalVolumeNumber
{
(void)@selector(setFinalVolume:); // expected-warning {{several methods with selector 'setFinalVolume:' of mismatched types are found for the @selector expression}}
}
@end