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
11void bar(void (^block)());
12
13void test1(Foo *p) {
14  __weak Foo *x = p; // __block used just to break cycle.
15  bar(^{
16    [x something];
17  });
18}
19
20void test2(Foo *p) {
21  __block Foo *x; // __block used as output variable.
22  bar(^{
23    x = [p something];
24  });
25}
26
27void 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
37void 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