83 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // RUN: %clang_cc1 -triple i386-apple-darwin9 -fobjc-runtime=macosx-fragile-10.5 -fsyntax-only -verify -Wno-objc-root-class %s
 | |
| 
 | |
| @interface I 
 | |
| {
 | |
| 	int IVAR; // expected-note{{instance variable is declared here}}
 | |
| 	int name;
 | |
| }
 | |
| @property int d1;
 | |
| @property id  prop_id; // expected-warning {{no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed}}, expected-warning {{default property attribute 'assign' not appropriate for non-GC object}}
 | |
| @property int name;
 | |
| @end
 | |
| 
 | |
| @interface I(CAT)
 | |
| @property int d1;
 | |
| @end
 | |
| 
 | |
| @implementation I
 | |
| @synthesize d1;		// expected-error {{synthesized property 'd1' must either be named the same as}}
 | |
| @dynamic    bad;	// expected-error {{property implementation must have its declaration in interface 'I'}}
 | |
| @synthesize prop_id;	// expected-error {{synthesized property 'prop_id' must either be named the same}}  // expected-note {{previous declaration is here}}
 | |
| @synthesize prop_id = IVAR;	// expected-error {{type of property 'prop_id' ('id') does not match type of instance variable 'IVAR' ('int')}} // expected-error {{property 'prop_id' is already implemented}}
 | |
| @synthesize name;	// OK! property with same name as an accessible ivar of same name
 | |
| @end
 | |
| 
 | |
| @implementation I(CAT) 
 | |
| @synthesize d1;		// expected-error {{@synthesize not allowed in a category's implementation}}
 | |
| @dynamic bad;		// expected-error {{property implementation must have its declaration in the category 'CAT'}}
 | |
| @end
 | |
| 
 | |
| @implementation E	// expected-warning {{cannot find interface declaration for 'E'}}
 | |
| @dynamic d;		// expected-error {{property implementation must have its declaration in interface 'E'}}
 | |
| @end
 | |
| 
 | |
| @implementation Q(MYCAT)  // expected-error {{cannot find interface declaration for 'Q'}}
 | |
| @dynamic d;		// expected-error {{property implementation in a category with no category declaration}}
 | |
| @end
 | |
| 
 | |
| @interface Foo
 | |
| @property double bar;
 | |
| @end
 | |
| 
 | |
| int func1() {
 | |
|    id foo;
 | |
|    double bar = [foo bar];
 | |
|    return 0;
 | |
| }
 | |
| 
 | |
| // PR3932
 | |
| typedef id BYObjectIdentifier;
 | |
| @interface Foo1  {
 | |
|   void *isa;
 | |
| }
 | |
| @property(copy) BYObjectIdentifier identifier;
 | |
| @end
 | |
| 
 | |
| @interface Foo2 
 | |
| {
 | |
|   int ivar;
 | |
| }
 | |
| @property int treeController;  // expected-note {{property declared here}}
 | |
| @property int ivar;	// OK
 | |
| @property int treeController;  // expected-error {{property has a previous declaration}}
 | |
| @end
 | |
| 
 | |
| // rdar://10127639
 | |
| @synthesize window; // expected-error {{missing context for property implementation declaration}}
 | |
| 
 | |
| // rdar://10408414
 | |
| Class test6_getClass();
 | |
| @interface Test6
 | |
| @end
 | |
| @implementation Test6
 | |
| + (float) globalValue { return 5.0f; }
 | |
| + (float) gv { return test6_getClass().globalValue; }
 | |
| @end
 | |
| 
 | |
| @interface Test7
 | |
| @property unsigned length;
 | |
| @end
 | |
| void test7(Test7 *t) {
 | |
|   char data[t.length] = {}; // expected-error {{variable-sized object may not be initialized}}
 | |
| }
 |