// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s @class FOO, BAR; // expected-note {{forward declaration of class here}} @class FOO, BAR; @interface INTF : FOO // expected-error {{attempting to use the forward class 'FOO' as superclass of 'INTF'}} @end @interface FOO - (BAR*) Meth1; - (FOO*) Meth2; @end @interface INTF1 : FOO @end @interface INTF2 : INTF1 // expected-note {{previous definition is here}} @end @class INTF1, INTF2; @interface INTF2 : INTF1 // expected-error {{duplicate interface definition for class 'INTF2'}} @end // 2nd test of a forward class declaration matching a typedef name // referring to class object. // FIXME. This may become a negative test should we decide to make this an error. // @interface NSObject @end @protocol XCElementP @end typedef NSObject <XCElementP> XCElement; // expected-note {{previous definition is here}} @interface XCElementMainImp { XCElement * _editingElement; } @end @class XCElement; // expected-warning {{redefinition of forward class 'XCElement' of a typedef name of an object type is ignored}} @implementation XCElementMainImp - (XCElement *)editingElement { return _editingElement; } @end // rdar://9653341 @class B; // expected-note {{forward declaration of class here}} @interface A : B {} // expected-error {{attempting to use the forward class 'B' as superclass of 'A'}} @end @interface B : A {} @end @implementation A @end @implementation B @end