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