]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaObjC/class-message-protocol-lookup.m
Vendor import of clang trunk r300422:
[FreeBSD/FreeBSD.git] / test / SemaObjC / class-message-protocol-lookup.m
1 // RUN: %clang_cc1  -fsyntax-only -verify -Wno-objc-root-class %s
2 // rdar://9224670
3
4 @interface RandomObject {
5 @private
6 }
7 + (id)alloc;
8 @end
9
10 @protocol TestProtocol
11 - (void)nothingInteresting;
12 @end
13
14 @protocol Test2Protocol
15 + (id)alloc;
16 - (id)alloc2; // expected-note 2 {{method 'alloc2' declared here}}
17 @end
18
19 @implementation RandomObject
20 - (void) Meth {
21     Class<TestProtocol> c = [c alloc]; //  expected-warning {{class method '+alloc' not found (return type defaults to 'id')}}
22     Class<Test2Protocol> c1 = [c1 alloc2]; //  expected-warning {{instance method 'alloc2' found instead of class method 'alloc2'}}
23     Class<Test2Protocol> c2 = [c2 alloc]; //  ok
24 }
25 + (id)alloc { return 0; }
26 @end
27
28 int main ()
29 {
30     Class<TestProtocol> c = [c alloc]; //  expected-warning {{class method '+alloc' not found (return type defaults to 'id')}}
31     Class<Test2Protocol> c1 = [c1 alloc2]; //  expected-warning {{instance method 'alloc2' found instead of class method 'alloc2'}}
32     Class<Test2Protocol> c2 = [c2 alloc]; //  ok
33     return 0;
34 }
35
36 // rdar://22812517
37
38 @protocol NSObject
39
40 - (int)respondsToSelector:(SEL)aSelector;
41
42 @end
43
44 __attribute__((objc_root_class))
45 @interface NSObject <NSObject>
46
47 @end
48
49 @protocol OtherProto
50
51 - (void)otherInstanceMethod; // expected-note {{method 'otherInstanceMethod' declared here}}
52
53 @end
54
55 @protocol MyProto <NSObject, OtherProto>
56 @end
57
58 void allowInstanceMethodsFromRootProtocols(Class<MyProto> c) {
59   [c respondsToSelector: @selector(instanceMethod)]; // no warning
60   [c otherInstanceMethod]; //  expected-warning {{instance method 'otherInstanceMethod' found instead of class method 'otherInstanceMethod'}}
61 }