Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -triple i386-apple-darwin9 -fobjc-fragile-abi -fsyntax-only -verify -Wno-objc-root-class %s
      2 
      3 @interface I 
      4 {
      5 	int IVAR; // expected-note{{ivar is declared here}}
      6 	int name;
      7 }
      8 @property int d1;
      9 @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}}
     10 @property int name;
     11 @end
     12 
     13 @interface I(CAT)
     14 @property int d1;	// expected-note 2 {{property declared here}}
     15 @end
     16 
     17 @implementation I
     18 @synthesize d1;		// expected-error {{synthesized property 'd1' must either be named the same as}}
     19 @dynamic    bad;	// expected-error {{property implementation must have its declaration in interface 'I'}}
     20 @synthesize prop_id;	// expected-error {{synthesized property 'prop_id' must either be named the same}}  // expected-note {{previous declaration is here}}
     21 @synthesize prop_id = IVAR;	// expected-error {{type of property 'prop_id' ('id') does not match type of ivar 'IVAR' ('int')}} // expected-error {{property 'prop_id' is already implemented}}
     22 @synthesize name;	// OK! property with same name as an accessible ivar of same name
     23 @end
     24 
     25 @implementation I(CAT)  // expected-warning {{property 'd1' requires method 'd1' to be defined }} \
     26                         // expected-warning {{property 'd1' requires method 'setD1:' to be defined }}
     27 @synthesize d1;		// expected-error {{@synthesize not allowed in a category's implementation}}
     28 @dynamic bad;		// expected-error {{property implementation must have its declaration in the category 'CAT'}}
     29 @end
     30 
     31 @implementation E	// expected-warning {{cannot find interface declaration for 'E'}}
     32 @dynamic d;		// expected-error {{property implementation must have its declaration in interface 'E'}}
     33 @end
     34 
     35 @implementation Q(MYCAT)  // expected-error {{cannot find interface declaration for 'Q'}}
     36 @dynamic d;		// expected-error {{property implementation in a category with no category declaration}}
     37 @end
     38 
     39 @interface Foo
     40 @property double bar;
     41 @end
     42 
     43 int func1() {
     44    id foo;
     45    double bar = [foo bar];
     46    return 0;
     47 }
     48 
     49 // PR3932
     50 typedef id BYObjectIdentifier;
     51 @interface Foo1  {
     52   void *isa;
     53 }
     54 @property(copy) BYObjectIdentifier identifier;
     55 @end
     56 
     57 @interface Foo2 
     58 {
     59   int ivar;
     60 }
     61 @property int treeController;  // expected-note {{property declared here}}
     62 @property int ivar;	// OK
     63 @property int treeController;  // expected-error {{property has a previous declaration}}
     64 @end
     65 
     66 // rdar://10127639
     67 @synthesize window; // expected-error {{missing context for property implementation declaration}}
     68 
     69 // rdar://10408414
     70 Class test6_getClass();
     71 @interface Test6
     72 @end
     73 @implementation Test6
     74 + (float) globalValue { return 5.0f; }
     75 + (float) gv { return test6_getClass().globalValue; }
     76 @end
     77 
     78 @interface Test7
     79 @property unsigned length;
     80 @end
     81 void test7(Test7 *t) {
     82   char data[t.length] = {}; // expected-error {{variable-sized object may not be initialized}}
     83 }
     84