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