1 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fblocks -fsyntax-only -fobjc-arc -x objective-c -fobjc-runtime-has-weak %s.result |
2 | // RUN: arcmt-test --args -triple x86_64-apple-macosx10.7 -fblocks -fsyntax-only %s > %t |
3 | // RUN: diff %t %s.result |
4 | |
5 | #include "Common.h" |
6 | |
7 | @interface Foo : NSObject |
8 | -(Foo *)something; |
9 | @end |
10 | |
11 | void bar(void (^block)()); |
12 | |
13 | void test1(Foo *p) { |
14 | __weak Foo *x = p; // __block used just to break cycle. |
15 | bar(^{ |
16 | [x something]; |
17 | }); |
18 | } |
19 | |
20 | void test2(Foo *p) { |
21 | __block Foo *x; // __block used as output variable. |
22 | bar(^{ |
23 | x = [p something]; |
24 | }); |
25 | } |
26 | |
27 | void test3(Foo *p) { |
28 | __block Foo *x; // __block used as output variable. |
29 | bar(^{ |
30 | [x something]; |
31 | }); |
32 | bar(^{ |
33 | x = 0; |
34 | }); |
35 | } |
36 | |
37 | void test4(Foo *p) { |
38 | __weak Foo *x = p; // __block used just to break cycle. |
39 | bar(^{ |
40 | [x something]; |
41 | }); |
42 | bar(^{ |
43 | [x something]; |
44 | }); |
45 | } |
46 | |