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