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