blob: de94e884aee2735de81ae637f5f7a0a1ddc07ee4 [file] [log] [blame]
Daniel Dunbar8fbe78f2009-12-15 20:14:24 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Fariborz Jahanianc9cd8a12007-10-04 00:22:33 +00002
Fariborz Jahanian3ee91fa2011-06-23 23:16:19 +00003@class FOO, BAR; // expected-note {{forward class is declared here}}
Fariborz Jahanian397d8de2007-09-20 20:26:44 +00004@class FOO, BAR;
5
Fariborz Jahanian3ee91fa2011-06-23 23:16:19 +00006@interface INTF : FOO // expected-error {{attempting to use the forward class 'FOO' as superclass of 'INTF'}}
Fariborz Jahanian397d8de2007-09-20 20:26:44 +00007@end
8
9@interface FOO
10- (BAR*) Meth1;
11- (FOO*) Meth2;
12@end
13
14@interface INTF1 : FOO
15@end
16
Chris Lattnere6447ef2008-11-23 22:46:27 +000017@interface INTF2 : INTF1 // expected-note {{previous definition is here}}
Fariborz Jahanian397d8de2007-09-20 20:26:44 +000018@end
19
20
21@class INTF1, INTF2;
22
Chris Lattnere6447ef2008-11-23 22:46:27 +000023@interface INTF2 : INTF1 // expected-error {{duplicate interface definition for class 'INTF2'}}
Fariborz Jahanian397d8de2007-09-20 20:26:44 +000024@end
Fariborz Jahanian0d451812009-05-07 21:49:26 +000025
26// 2nd test of a forward class declaration matching a typedef name
27// referring to class object.
28// FIXME. This may become a negative test should we decide to make this an error.
29//
30@interface NSObject @end
31
32@protocol XCElementP @end
33
34typedef NSObject <XCElementP> XCElement;
35
36@interface XCElementMainImp {
37 XCElement * _editingElement;
38}
39@end
40
41@class XCElement;
42
43@implementation XCElementMainImp
44- (XCElement *)editingElement { return _editingElement; }
45@end
46
47
Fariborz Jahanian3ee91fa2011-06-23 23:16:19 +000048// rdar://9653341
49@class B; // expected-note {{forward class is declared here}}
50@interface A : B {} // expected-error {{attempting to use the forward class 'B' as superclass of 'A'}}
51@end
52
53@interface B : A {}
54@end
55
56@implementation A @end
57@implementation B @end
58