| // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s | 
 |  | 
 | typedef struct CGColor * __attribute__ ((NSObject)) CGColorRef; | 
 | typedef struct CGColor * __attribute__((NSObject(12))) Illegal;  // expected-error {{'NSObject' attribute takes no arguments}} | 
 |  | 
 | static int count; | 
 | static CGColorRef tmp = 0; | 
 |  | 
 | typedef struct S1  __attribute__ ((NSObject)) CGColorRef1; // expected-error {{'NSObject' attribute is for pointer types only}} | 
 | typedef void *  __attribute__ ((NSObject)) CGColorRef2; // no-warning | 
 | typedef void * CFTypeRef; | 
 |  | 
 | @interface HandTested { | 
 | @public | 
 |     CGColorRef x; | 
 | } | 
 |  | 
 | @property(copy) CGColorRef x; | 
 | // rdar://problem/7809460 | 
 | typedef struct CGColor * __attribute__((NSObject)) CGColorRefNoNSObject; // no-warning | 
 | @property (nonatomic, retain) CGColorRefNoNSObject color; | 
 | // rdar://problem/12197822 | 
 | @property (strong) __attribute__((NSObject)) CFTypeRef myObj; // no-warning | 
 | //rdar://problem/27747154 | 
 | @property (strong, nullable) CGColorRefNoNSObject color2; // no-warning | 
 | @end | 
 |  | 
 | void setProperty(id self, id value)  { | 
 |   ((HandTested *)self)->x = value; | 
 | } | 
 |  | 
 | id getProperty(id self) { | 
 |      return (id)((HandTested *)self)->x; | 
 | } | 
 |  | 
 | @implementation HandTested | 
 | @synthesize x=x; | 
 | @synthesize myObj; | 
 | @dynamic color; | 
 | @end | 
 |  | 
 | int main(int argc, char *argv[]) { | 
 |     HandTested *to; | 
 |     to.x = tmp;  // setter | 
 |     if (tmp != to.x) | 
 |       to.x = tmp; | 
 |     return 0; | 
 | } | 
 |  | 
 | // rdar://10453342 | 
 | @interface I | 
 | { | 
 |    __attribute__((NSObject)) void * color; // expected-warning {{'NSObject' attribute may be put on a typedef only; attribute is ignored}} | 
 | } | 
 |   // <rdar://problem/10930507> | 
 | @property (nonatomic, retain) __attribute__((NSObject)) CGColorRefNoNSObject color; // // no-warning | 
 | @end | 
 | void test_10453342() { | 
 |     char* __attribute__((NSObject)) string2 = 0; // expected-warning {{'NSObject' attribute may be put on a typedef only; attribute is ignored}} | 
 | } | 
 |  | 
 | // rdar://11569860 | 
 | @interface A { int i; } | 
 | @property(retain) __attribute__((NSObject)) int i; // expected-error {{'NSObject' attribute is for pointer types only}} \ | 
 |   						   // expected-error {{property with 'retain (or strong)' attribute must be of object type}} | 
 | @end | 
 |  | 
 | @implementation A | 
 | @synthesize i; | 
 | @end | 
 |  |