// 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 (retain) id prop; @property (retain) 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 autorelease]; _prop = [newVal retain]; } -(void) setProp2:(CFTypeRef) newVal { [_prop autorelease]; _prop = (id)CFRetain(newVal); } -(id) xpc_prop { return _xpc_prop; } -(void) setXpc_prop:(xpc_object_t) newVal { [_xpc_prop autorelease]; _xpc_prop = xpc_retain(newVal); } @end void NSLog(id, ...); int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; A *a = [[A new] autorelease]; B *b = [[B new] autorelease]; NSLog(@"%s", [b containsSelf:a] ? "YES" : "NO"); [pool drain]; return 0; } void test(A *prevVal, A *newVal) { [prevVal autorelease]; prevVal = [newVal retain]; } id test2(A* val) { [[val retain] autorelease]; return val; } id test3() { id a = [[A alloc] init]; [a autorelease]; } |