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