// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result
// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s > %t
// RUN: diff %t %s.result

#include "Common.h"

@interface A : NSObject {
@package
    id object;
}
@end

@interface B : NSObject {
  id _prop;
  xpc_object_t _xpc_prop;
}
- (BOOL)containsSelf:(A*)a;
@property (strong) id prop;
@property (strong) xpc_object_t xpc_prop;
@end

@implementation A
@end

@implementation B
- (BOOL)containsSelf:(A*)a {
    return a->object == self;
}

-(id) prop {
  return _prop;
}
-(void) setProp:(id) newVal {
  _prop = newVal;
}
-(void) setProp2:(CFTypeRef) newVal {
  _prop = (id)CFBridgingRelease(CFRetain(newVal));
}

-(id) xpc_prop {
  return _xpc_prop;
}
-(void) setXpc_prop:(xpc_object_t) newVal {
  _xpc_prop = newVal;
}
@end

void NSLog(id, ...);

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        A *a = [A new];
        B *b = [B new];
        NSLog(@"%s", [b containsSelf:a] ? "YES" : "NO");
    }
    return 0;
}

void test(A *prevVal, A *newVal) {
  prevVal = newVal;
}

id test2(A* val) {
  return val;
}

id test3() {
  id a = [[A alloc] init];
}
