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