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