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 51void NSLog(id, ...); 52 53int 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 62void test(A *prevVal, A *newVal) { 63 [prevVal autorelease]; 64 prevVal = [newVal retain]; 65} 66 67id test2(A* val) { 68 [[val retain] autorelease]; 69 return val; 70} 71 72id test3() { 73 id a = [[A alloc] init]; 74 [a autorelease]; 75} 76