1 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -fobjc-runtime-has-weak -x objective-c %s.result |
2 | // RUN: arcmt-test --args -triple x86_64-apple-macosx10.7 -fsyntax-only %s > %t |
3 | // RUN: diff %t %s.result |
4 | |
5 | #include "Common.h" |
6 | |
7 | __attribute__((objc_arc_weak_reference_unavailable)) |
8 | @interface WeakOptOut |
9 | @end |
10 | |
11 | @class _NSCachedAttributedString; |
12 | typedef _NSCachedAttributedString *BadClassForWeak; |
13 | |
14 | @class Forw; |
15 | |
16 | @interface Foo : NSObject { |
17 | Foo *__weak x, *__weak w, *__weak q1, *__weak q2; |
18 | WeakOptOut *__unsafe_unretained oo; |
19 | BadClassForWeak __unsafe_unretained bcw; |
20 | id __unsafe_unretained not_safe1; |
21 | NSObject *__unsafe_unretained not_safe2; |
22 | Forw *__unsafe_unretained not_safe3; |
23 | Foo *assign_plus1; |
24 | } |
25 | @property (weak, readonly) Foo *x; |
26 | @property (weak) Foo *w; |
27 | @property (weak) Foo *q1, *q2; |
28 | @property (unsafe_unretained) WeakOptOut *oo; |
29 | @property (unsafe_unretained) BadClassForWeak bcw; |
30 | @property (unsafe_unretained) id not_safe1; |
31 | @property (unsafe_unretained) NSObject *not_safe2; |
32 | @property (unsafe_unretained) Forw *not_safe3; |
33 | @property (readonly) Foo *assign_plus1; |
34 | @property (readonly) Foo *assign_plus2; |
35 | @property (readonly) Foo *assign_plus3; |
36 | |
37 | @property (weak) Foo *no_user_ivar1; |
38 | @property (weak, readonly) Foo *no_user_ivar2; |
39 | |
40 | @property (strong) id def1; |
41 | @property (atomic,strong) id def2; |
42 | @property (strong,atomic) id def3; |
43 | |
44 | @end |
45 | |
46 | @implementation Foo |
47 | @synthesize x,w,q1,q2,oo,bcw,not_safe1,not_safe2,not_safe3; |
48 | @synthesize no_user_ivar1, no_user_ivar2; |
49 | @synthesize assign_plus1, assign_plus2, assign_plus3; |
50 | @synthesize def1, def2, def3; |
51 | |
52 | -(void)test:(Foo *)parm { |
53 | assign_plus1 = [[Foo alloc] init]; |
54 | assign_plus2 = [Foo new]; |
55 | assign_plus3 = parm; |
56 | } |
57 | @end |
58 | |
59 | @interface TestExt |
60 | @property (strong,readonly) TestExt *x1; |
61 | @property (weak, readonly) TestExt *x2; |
62 | @end |
63 | |
64 | @interface TestExt() |
65 | @property (strong,readwrite) TestExt *x1; |
66 | @property (weak, readwrite) TestExt *x2; |
67 | @property (strong) TestExt *x3; |
68 | @end |
69 | |
70 | @implementation TestExt |
71 | @synthesize x1, x2, x3; |
72 | @end |
73 | |