58 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s2 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@end8 9@interface FOO 10- (BAR*) Meth1;11- (FOO*) Meth2;12@end13 14@interface INTF1 : FOO 15@end16 17@interface INTF2 : INTF1 // expected-note {{previous definition is here}}18@end19 20 21@class INTF1, INTF2;22 23@interface INTF2 : INTF1 // expected-error {{duplicate interface definition for class 'INTF2'}}24@end25 26// 2nd test of a forward class declaration matching a typedef name27// referring to class object.28// FIXME. This may become a negative test should we decide to make this an error.29//30@interface NSObject @end31 32@protocol XCElementP @end33 34typedef NSObject <XCElementP> XCElement; // expected-note {{previous definition is here}}35 36@interface XCElementMainImp {37 XCElement * _editingElement;38}39@end40 41@class XCElement; // expected-warning {{redefinition of forward class 'XCElement' of a typedef name of an object type is ignored}}42 43@implementation XCElementMainImp44- (XCElement *)editingElement { return _editingElement; }45@end46 47 48@class B; // expected-note {{forward declaration of class here}}49@interface A : B {} // expected-error {{attempting to use the forward class 'B' as superclass of 'A'}}50@end51 52@interface B : A {}53@end54 55@implementation A @end56@implementation B @end57 58