blob: 7df85da5009f0d825e488e3073dbfde647a42a3b [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Fariborz Jahanian4b6df3f2007-10-04 00:22:33 +00002
Fariborz Jahanianb27c1562007-09-22 00:01:35 +00003@interface MyClass1 @end
4
5@protocol p1,p2,p3;
6
Chris Lattner6ff0fc32008-11-23 22:38:38 +00007@interface MyClass1 (Category1) <p1> // expected-warning {{cannot find protocol definition for 'p1'}} expected-note {{previous definition is here}}
Fariborz Jahanianb27c1562007-09-22 00:01:35 +00008@end
9
Chris Lattner6ff0fc32008-11-23 22:38:38 +000010@interface MyClass1 (Category1) // expected-warning {{duplicate definition of category 'Category1' on interface 'MyClass1'}}
Fariborz Jahanianb27c1562007-09-22 00:01:35 +000011@end
12
13@interface MyClass1 (Category3)
14@end
15
Chris Lattner6ff0fc32008-11-23 22:38:38 +000016@interface MyClass1 (Category4) @end // expected-note {{previous definition is here}}
Fariborz Jahanianb27c1562007-09-22 00:01:35 +000017@interface MyClass1 (Category5) @end
18@interface MyClass1 (Category6) @end
Chris Lattner6ff0fc32008-11-23 22:38:38 +000019@interface MyClass1 (Category7) @end // expected-note {{previous definition is here}}
20@interface MyClass1 (Category8) @end // expected-note {{previous definition is here}}
Fariborz Jahanianb27c1562007-09-22 00:01:35 +000021
22
Chris Lattner6ff0fc32008-11-23 22:38:38 +000023@interface MyClass1 (Category4) @end // expected-warning {{duplicate definition of category 'Category4' on interface 'MyClass1'}}
24@interface MyClass1 (Category7) @end // expected-warning {{duplicate definition of category 'Category7' on interface 'MyClass1'}}
25@interface MyClass1 (Category8) @end // expected-warning {{duplicate definition of category 'Category8' on interface 'MyClass1'}}
Fariborz Jahanianb27c1562007-09-22 00:01:35 +000026
27
28@protocol p3 @end
29
Chris Lattnereacc3922008-07-26 03:47:43 +000030@interface MyClass1 (Category) <p2, p3> @end // expected-warning {{cannot find protocol definition for 'p2'}}
Fariborz Jahanianb27c1562007-09-22 00:01:35 +000031
Douglas Gregorf06cdae2010-01-03 18:01:57 +000032@interface UnknownClass (Category) @end // expected-error {{cannot find interface declaration for 'UnknownClass'}}
Fariborz Jahanianb27c1562007-09-22 00:01:35 +000033
Douglas Gregorb3029962011-11-14 22:10:01 +000034@class MyClass2; // expected-note{{forward declaration of class here}}
Fariborz Jahanianb27c1562007-09-22 00:01:35 +000035
Douglas Gregorb3029962011-11-14 22:10:01 +000036@interface MyClass2 (Category) @end // expected-error {{cannot define category for undefined class 'MyClass2'}}
Fariborz Jahanianb27c1562007-09-22 00:01:35 +000037
Steve Naroff74199b62008-06-05 04:33:44 +000038@interface XCRemoteComputerManager
39@end
40
41@interface XCRemoteComputerManager()
42@end
43
44@interface XCRemoteComputerManager()
45@end
46
Chris Lattner6ff0fc32008-11-23 22:38:38 +000047@interface XCRemoteComputerManager(x) // expected-note {{previous definition is here}}
Steve Naroff74199b62008-06-05 04:33:44 +000048@end
49
Chris Lattner6ff0fc32008-11-23 22:38:38 +000050@interface XCRemoteComputerManager(x) // expected-warning {{duplicate definition of category 'x' on interface 'XCRemoteComputerManager'}}
Steve Naroff74199b62008-06-05 04:33:44 +000051@end
52
53@implementation XCRemoteComputerManager
54@end
55
Argyrios Kyrtzidis8a1d7222009-07-21 00:05:53 +000056@implementation XCRemoteComputerManager(x) // expected-note {{previous definition is here}}
57@end
Fariborz Jahanianb27c1562007-09-22 00:01:35 +000058
Argyrios Kyrtzidis8a1d7222009-07-21 00:05:53 +000059@implementation XCRemoteComputerManager(x) // expected-error {{reimplementation of category 'x' for class 'XCRemoteComputerManager'}}
60@end
Daniel Dunbara22b6402009-09-29 18:51:43 +000061
62// <rdar://problem/7249233>
63
64@protocol MultipleCat_P
Fariborz Jahanian61c8d3e2010-10-29 23:20:05 +000065-(void) im0; // expected-note {{method declared here}}
Daniel Dunbara22b6402009-09-29 18:51:43 +000066@end
67
Fariborz Jahanian8822f7c2010-03-27 19:02:17 +000068@interface MultipleCat_I @end // expected-note {{required for direct or indirect protocol 'MultipleCat_P'}}
Daniel Dunbara22b6402009-09-29 18:51:43 +000069
70@interface MultipleCat_I() @end
71
72@interface MultipleCat_I() <MultipleCat_P> @end
73
Fariborz Jahanian61c8d3e2010-10-29 23:20:05 +000074@implementation MultipleCat_I // expected-warning {{incomplete implementation}} \
Richard Trieu2fe9b7f2011-12-15 00:38:15 +000075 // expected-warning {{method in protocol not implemented}}
Daniel Dunbara22b6402009-09-29 18:51:43 +000076@end
Ted Kremenek09b68972010-02-23 19:39:46 +000077
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}}
Ted Kremenekc32bb2a2011-01-20 19:45:14 +000081
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