/* APPLE LOCAL file radar 5595325 */
/* Test for implementation of __attribute__ ((NSObject)) to make a struct pointer
   a first class objective-c pointer to object. */
/* { dg-options "-mmacosx-version-min=10.6 -framework Foundation" } */
/* { dg-do compile { target *-*-darwin* } } */

#import <Foundation/Foundation.h>

typedef struct CGColor * __attribute__ ((NSObject)) CGColorRef;
static int count;
static CGColorRef tmp = 0;

@interface HandTested : NSObject {
@public
    CGColorRef x;
}
@property(copy) CGColorRef x;
@end

void objc_setProperty(id self, SEL _sel, ptrdiff_t offset, id value, BOOL atomic, BOOL shouldCopy)  {
  if (count != 0 || !shouldCopy)
    abort ();
  ++ count;
  ((HandTested *)self)->x = value;
}

id objc_getProperty(id self, SEL _sel, ptrdiff_t offset, BOOL atomic) {
     if (count != 1)
       abort();
     return (id)((HandTested *)self)->x;
}

@implementation HandTested
@synthesize x=x;
@end

int main(int argc, char *argv[]) {
    HandTested *to = [HandTested new];
    to.x = tmp;  // setter
    if (tmp != to.x)
      abort ();
    return 0;
}

