1// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
2
3@class FOO, BAR; // expected-note {{forward declaration of class here}}
4@class FOO, BAR;
5
6@interface INTF : FOO	// expected-error {{attempting to use the forward class 'FOO' as superclass of 'INTF'}}
7@end
8
9@interface FOO
10- (BAR*) Meth1;
11- (FOO*) Meth2;
12@end
13
14@interface INTF1 : FOO
15@end
16
17@interface INTF2 : INTF1 // expected-note {{previous definition is here}}
18@end
19
20
21@class INTF1, INTF2;
22
23@interface INTF2 : INTF1 // expected-error {{duplicate interface definition for class 'INTF2'}}
24@end
25
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; // expected-note {{previous definition is here}}
35
36@interface XCElementMainImp  {
37  XCElement * _editingElement;
38}
39@end
40
41@class XCElement; // expected-warning {{redefinition of forward class 'XCElement' of a typedef name of an object type is ignored}}
42
43@implementation XCElementMainImp
44- (XCElement *)editingElement  { return _editingElement;  }
45@end
46
47
48// rdar://9653341
49@class B; // expected-note {{forward declaration of class 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
59