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 Jahanianvoid 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 Jahanianint main() { 28*d1b378e0SFariborz Jahanian scan(); 29*d1b378e0SFariborz Jahanian } 30