2011-10-02 09:16:38 +08:00
|
|
|
// 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
|
2011-06-16 07:25:17 +08:00
|
|
|
// RUN: diff %t %s.result
|
2012-01-12 10:34:32 +08:00
|
|
|
// DISABLE: mingw32
|
2011-06-16 07:25:17 +08:00
|
|
|
|
2012-05-24 05:50:04 +08:00
|
|
|
#include "Common.h"
|
2011-06-16 07:25:17 +08:00
|
|
|
|
|
|
|
@interface A : NSObject {
|
|
|
|
@package
|
|
|
|
id object;
|
|
|
|
}
|
|
|
|
@end
|
|
|
|
|
2012-05-24 05:50:04 +08:00
|
|
|
@interface B : NSObject {
|
|
|
|
id _prop;
|
|
|
|
xpc_object_t _xpc_prop;
|
|
|
|
}
|
2011-06-16 07:25:17 +08:00
|
|
|
- (BOOL)containsSelf:(A*)a;
|
2012-05-24 05:50:04 +08:00
|
|
|
@property (retain) id prop;
|
|
|
|
@property (retain) xpc_object_t xpc_prop;
|
2011-06-16 07:25:17 +08:00
|
|
|
@end
|
|
|
|
|
|
|
|
@implementation A
|
|
|
|
@end
|
|
|
|
|
|
|
|
@implementation B
|
|
|
|
- (BOOL)containsSelf:(A*)a {
|
|
|
|
return a->object == self;
|
|
|
|
}
|
2012-05-24 05:50:04 +08:00
|
|
|
|
|
|
|
-(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);
|
|
|
|
}
|
2011-06-16 07:25:17 +08:00
|
|
|
@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;
|
|
|
|
}
|
2012-05-24 05:50:04 +08:00
|
|
|
|
|
|
|
void test(A *prevVal, A *newVal) {
|
|
|
|
[prevVal autorelease];
|
|
|
|
prevVal = [newVal retain];
|
|
|
|
}
|
2013-01-05 02:29:59 +08:00
|
|
|
|
|
|
|
id test2(A* val) {
|
|
|
|
[[val retain] autorelease];
|
|
|
|
return val;
|
|
|
|
}
|
2013-01-05 02:30:11 +08:00
|
|
|
|
|
|
|
id test3() {
|
|
|
|
id a = [[A alloc] init];
|
|
|
|
[a autorelease];
|
|
|
|
}
|