1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result 2*67e74705SXin Li// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s > %t 3*67e74705SXin Li// RUN: diff %t %s.result 4*67e74705SXin Li 5*67e74705SXin Li#include "Common.h" 6*67e74705SXin Li 7*67e74705SXin Li@interface A : NSObject { 8*67e74705SXin Li@package 9*67e74705SXin Li id object; 10*67e74705SXin Li} 11*67e74705SXin Li@end 12*67e74705SXin Li 13*67e74705SXin Li@interface B : NSObject { 14*67e74705SXin Li id _prop; 15*67e74705SXin Li xpc_object_t _xpc_prop; 16*67e74705SXin Li} 17*67e74705SXin Li- (BOOL)containsSelf:(A*)a; 18*67e74705SXin Li@property (retain) id prop; 19*67e74705SXin Li@property (retain) xpc_object_t xpc_prop; 20*67e74705SXin Li@end 21*67e74705SXin Li 22*67e74705SXin Li@implementation A 23*67e74705SXin Li@end 24*67e74705SXin Li 25*67e74705SXin Li@implementation B 26*67e74705SXin Li- (BOOL)containsSelf:(A*)a { 27*67e74705SXin Li return a->object == self; 28*67e74705SXin Li} 29*67e74705SXin Li 30*67e74705SXin Li-(id) prop { 31*67e74705SXin Li return _prop; 32*67e74705SXin Li} 33*67e74705SXin Li-(void) setProp:(id) newVal { 34*67e74705SXin Li [_prop autorelease]; 35*67e74705SXin Li _prop = [newVal retain]; 36*67e74705SXin Li} 37*67e74705SXin Li-(void) setProp2:(CFTypeRef) newVal { 38*67e74705SXin Li [_prop autorelease]; 39*67e74705SXin Li _prop = (id)CFRetain(newVal); 40*67e74705SXin Li} 41*67e74705SXin Li 42*67e74705SXin Li-(id) xpc_prop { 43*67e74705SXin Li return _xpc_prop; 44*67e74705SXin Li} 45*67e74705SXin Li-(void) setXpc_prop:(xpc_object_t) newVal { 46*67e74705SXin Li [_xpc_prop autorelease]; 47*67e74705SXin Li _xpc_prop = xpc_retain(newVal); 48*67e74705SXin Li} 49*67e74705SXin Li@end 50*67e74705SXin Li 51*67e74705SXin Livoid NSLog(id, ...); 52*67e74705SXin Li 53*67e74705SXin Liint main (int argc, const char * argv[]) { 54*67e74705SXin Li NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 55*67e74705SXin Li A *a = [[A new] autorelease]; 56*67e74705SXin Li B *b = [[B new] autorelease]; 57*67e74705SXin Li NSLog(@"%s", [b containsSelf:a] ? "YES" : "NO"); 58*67e74705SXin Li [pool drain]; 59*67e74705SXin Li return 0; 60*67e74705SXin Li} 61*67e74705SXin Li 62*67e74705SXin Livoid test(A *prevVal, A *newVal) { 63*67e74705SXin Li [prevVal autorelease]; 64*67e74705SXin Li prevVal = [newVal retain]; 65*67e74705SXin Li} 66*67e74705SXin Li 67*67e74705SXin Liid test2(A* val) { 68*67e74705SXin Li [[val retain] autorelease]; 69*67e74705SXin Li return val; 70*67e74705SXin Li} 71*67e74705SXin Li 72*67e74705SXin Liid test3() { 73*67e74705SXin Li id a = [[A alloc] init]; 74*67e74705SXin Li [a autorelease]; 75*67e74705SXin Li} 76