59 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // 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
 | |
| 
 |