1 | // RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t |
---|---|
2 | // rdar: // 8041962 |
3 | |
4 | extern "C" int printf(const char*, ...); |
5 | |
6 | struct ST { |
7 | int filler; |
8 | int referrer; |
9 | }; |
10 | |
11 | void OUTER_BLOCK(void (^fixer)(ST& ref)) { |
12 | ST ref = {2, 100}; |
13 | fixer(ref); |
14 | } |
15 | |
16 | void INNER_BLOCK(int (^largeDo) ()) { |
17 | printf("%d\n", largeDo()); |
18 | } |
19 | |
20 | void scan() { |
21 | OUTER_BLOCK(^(ST &ref) { |
22 | INNER_BLOCK(^() { return ref.referrer + ref.filler; }); |
23 | }); |
24 | |
25 | } |
26 | |
27 | int main() { |
28 | scan(); |
29 | } |
30 |