Home | History | Annotate | Download | only in SemaObjC
      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 
     34 typedef 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