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
 | 
						|
 |