diff options
Diffstat (limited to 'clang/test/SemaObjC/class-protocol-method-match.m')
-rw-r--r-- | clang/test/SemaObjC/class-protocol-method-match.m | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/clang/test/SemaObjC/class-protocol-method-match.m b/clang/test/SemaObjC/class-protocol-method-match.m new file mode 100644 index 0000000..7c936e6 --- /dev/null +++ b/clang/test/SemaObjC/class-protocol-method-match.m @@ -0,0 +1,48 @@ +// RUN: %clang_cc1 -Woverriding-method-mismatch -fsyntax-only -verify -Wno-objc-root-class %s +// rdar://9352731 + +@protocol Bar +@required +- (bycopy id)bud; // expected-note {{previous declaration is here}} +- (unsigned char) baz; // expected-note {{previous declaration is here}} +- (char) ok; +- (void) also_ok; +@end + +@protocol Bar1 +@required +- (unsigned char) baz; // expected-note {{previous declaration is here}} +- (unsigned char) also_ok; // expected-note {{previous declaration is here}} +- (void) ban : (int) arg, ...; // expected-note {{previous declaration is here}} +@end + +@protocol Baz <Bar, Bar1> +- (void) bar : (unsigned char)arg; // expected-note {{previous declaration is here}} +- (void) ok; +- (char) bak; // expected-note {{previous declaration is here}} +@end + +@interface Foo <Baz> +- (id)bud; // expected-warning {{conflicting distributed object modifiers on return type in declaration of 'bud'}} +- (void) baz; // expected-warning 2 {{conflicting return type in declaration of 'baz': 'unsigned char' vs 'void'}} +- (void) bar : (unsigned char*)arg; // expected-warning {{conflicting parameter types in declaration of 'bar:': 'unsigned char' vs 'unsigned char *'}} +- (void) ok; +- (void) also_ok; // expected-warning {{conflicting return type in declaration of 'also_ok': 'unsigned char' vs 'void'}} +- (void) still_ok; +- (void) ban : (int) arg; // expected-warning {{conflicting variadic declaration of method and its implementation}} +@end + +@interface Foo() +- (void) bak; +@end + +@implementation Foo +- (bycopy id)bud { return 0; } +- (void) baz {} +- (void) bar : (unsigned char*)arg {} +- (void) ok {} +- (void) also_ok {} +- (void) still_ok {} +- (void) ban : (int) arg {} +- (void) bak {} // expected-warning {{conflicting return type in declaration of 'bak': 'char' vs 'void'}} +@end |