Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
      2 
      3 typedef struct CGColor * __attribute__ ((NSObject)) CGColorRef;
      4 typedef struct CGColor * __attribute__((NSObject(12))) Illegal;  // expected-error {{'NSObject' attribute takes no arguments}}
      5 
      6 static int count;
      7 static CGColorRef tmp = 0;
      8 
      9 typedef struct S1  __attribute__ ((NSObject)) CGColorRef1; // expected-error {{'NSObject' attribute is for pointer types only}}
     10 typedef void *  __attribute__ ((NSObject)) CGColorRef2; // no-warning
     11 typedef void * CFTypeRef;
     12 
     13 @interface HandTested {
     14 @public
     15     CGColorRef x;
     16 }
     17 
     18 @property(copy) CGColorRef x;
     19 // rdar://problem/7809460
     20 typedef struct CGColor * __attribute__((NSObject)) CGColorRefNoNSObject; // no-warning
     21 @property (nonatomic, retain) CGColorRefNoNSObject color;
     22 // rdar://problem/12197822
     23 @property (strong) __attribute__((NSObject)) CFTypeRef myObj; // no-warning
     24 @end
     25 
     26 void setProperty(id self, id value)  {
     27   ((HandTested *)self)->x = value;
     28 }
     29 
     30 id getProperty(id self) {
     31      return (id)((HandTested *)self)->x;
     32 }
     33 
     34 @implementation HandTested
     35 @synthesize x=x;
     36 @synthesize myObj;
     37 @dynamic color;
     38 @end
     39 
     40 int main(int argc, char *argv[]) {
     41     HandTested *to;
     42     to.x = tmp;  // setter
     43     if (tmp != to.x)
     44       to.x = tmp;
     45     return 0;
     46 }
     47 
     48 // rdar://10453342
     49 @interface I
     50 {
     51    __attribute__((NSObject)) void * color; // expected-warning {{'NSObject' attribute may be put on a typedef only; attribute is ignored}}
     52 }
     53   // <rdar://problem/10930507>
     54 @property (nonatomic, retain) __attribute__((NSObject)) CGColorRefNoNSObject color; // // no-warning
     55 @end
     56 void test_10453342() {
     57     char* __attribute__((NSObject)) string2 = 0; // expected-warning {{'NSObject' attribute may be put on a typedef only; attribute is ignored}}
     58 }
     59 
     60 // rdar://11569860
     61 @interface A { int i; }
     62 @property(retain) __attribute__((NSObject)) int i; // expected-error {{'NSObject' attribute is for pointer types only}} \
     63   						   // expected-error {{property with 'retain (or strong)' attribute must be of object type}}
     64 @end
     65 
     66 @implementation A
     67 @synthesize i;
     68 @end
     69 
     70