1 | // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s |
2 | |
3 | @interface MyClass1 @end |
4 | |
5 | @protocol p1,p2,p3; // expected-note {{protocol 'p1' has no definition}} \ |
6 | // expected-note {{protocol 'p2' has no definition}} |
7 | |
8 | @interface MyClass1 (Category1) <p1> // expected-warning {{cannot find protocol definition for 'p1'}} expected-note {{previous definition is here}} |
9 | @end |
10 | |
11 | @interface MyClass1 (Category1) // expected-warning {{duplicate definition of category 'Category1' on interface 'MyClass1'}} |
12 | @end |
13 | |
14 | @interface MyClass1 (Category3) |
15 | @end |
16 | |
17 | @interface MyClass1 (Category4) @end // expected-note {{previous definition is here}} |
18 | @interface MyClass1 (Category5) @end |
19 | @interface MyClass1 (Category6) @end |
20 | @interface MyClass1 (Category7) @end // expected-note {{previous definition is here}} |
21 | @interface MyClass1 (Category8) @end // expected-note {{previous definition is here}} |
22 | |
23 | |
24 | @interface MyClass1 (Category4) @end // expected-warning {{duplicate definition of category 'Category4' on interface 'MyClass1'}} |
25 | @interface MyClass1 (Category7) @end // expected-warning {{duplicate definition of category 'Category7' on interface 'MyClass1'}} |
26 | @interface MyClass1 (Category8) @end // expected-warning {{duplicate definition of category 'Category8' on interface 'MyClass1'}} |
27 | |
28 | |
29 | @protocol p3 @end |
30 | |
31 | @interface MyClass1 (Category) <p2, p3> @end // expected-warning {{cannot find protocol definition for 'p2'}} |
32 | |
33 | @interface UnknownClass (Category) @end // expected-error {{cannot find interface declaration for 'UnknownClass'}} |
34 | |
35 | @class MyClass2; // expected-note{{forward declaration of class here}} |
36 | |
37 | @interface MyClass2 (Category) @end // expected-error {{cannot define category for undefined class 'MyClass2'}} |
38 | |
39 | @interface XCRemoteComputerManager |
40 | @end |
41 | |
42 | @interface XCRemoteComputerManager() |
43 | @end |
44 | |
45 | @interface XCRemoteComputerManager() |
46 | @end |
47 | |
48 | @interface XCRemoteComputerManager(x) // expected-note {{previous definition is here}} |
49 | @end |
50 | |
51 | @interface XCRemoteComputerManager(x) // expected-warning {{duplicate definition of category 'x' on interface 'XCRemoteComputerManager'}} |
52 | @end |
53 | |
54 | @implementation XCRemoteComputerManager |
55 | @end |
56 | |
57 | @implementation XCRemoteComputerManager(x) // expected-note {{previous definition is here}} |
58 | @end |
59 | |
60 | @implementation XCRemoteComputerManager(x) // expected-error {{reimplementation of category 'x' for class 'XCRemoteComputerManager'}} |
61 | @end |
62 | |
63 | // <rdar://problem/7249233> |
64 | |
65 | @protocol MultipleCat_P |
66 | -(void) im0; // expected-note {{method 'im0' declared here}} |
67 | @end |
68 | |
69 | @interface MultipleCat_I @end |
70 | |
71 | @interface MultipleCat_I() @end |
72 | |
73 | @interface MultipleCat_I() <MultipleCat_P> @end |
74 | |
75 | @implementation MultipleCat_I // expected-warning {{method 'im0' in protocol 'MultipleCat_P' not implemented}} |
76 | @end |
77 | |
78 | // <rdar://problem/7680391> - Handle nameless categories with no name that refer |
79 | // to an undefined class |
80 | @interface RDar7680391 () @end // expected-error{{cannot find interface declaration}} |
81 | |
82 | // <rdar://problem/8891119> - Handle @synthesize being used in conjunction |
83 | // with explicitly declared accessor. |
84 | @interface RDar8891119 { |
85 | id _name; |
86 | } |
87 | @end |
88 | @interface RDar8891119 () |
89 | - (id)name; |
90 | @end |
91 | @interface RDar8891119 () |
92 | @property (copy) id name; |
93 | @end |
94 | @implementation RDar8891119 |
95 | @synthesize name = _name; |
96 | @end |
97 | |
98 | // rdar://10968158 |
99 | @class I; // expected-note {{forward declaration}} |
100 | @implementation I(cat) // expected-error{{cannot find interface declaration}} |
101 | @end |
102 | |
103 | // <rdar://problem/11478173> |
104 | @interface Unrelated |
105 | - foo; |
106 | @end |
107 | |
108 | @interface Blah (Blarg) // expected-error{{cannot find interface declaration for 'Blah'}} |
109 | - foo; |
110 | @end |
111 | |