1*67e74705SXin Li // RUN: %clang_cc1 -fblocks -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s 2*67e74705SXin Li // Ensure that we generate a line table entry for the block cleanup. 3*67e74705SXin Li // CHECK: define {{.*}} @__main_block_invoke 4*67e74705SXin Li // CHECK: _NSConcreteStackBlock 5*67e74705SXin Li // CHECK: = bitcast {{.*}}, !dbg ![[L1:[0-9]+]] 6*67e74705SXin Li // CHECK-NOT: call {{.*}} @_Block_object_dispose{{.*}}, !dbg ![[L1]] 7*67e74705SXin Li // CHECK: ret 8*67e74705SXin Li 9*67e74705SXin Li void * _NSConcreteStackBlock; 10*67e74705SXin Li #ifdef __cplusplus 11*67e74705SXin Li extern "C" void exit(int); 12*67e74705SXin Li #else 13*67e74705SXin Li extern void exit(int); 14*67e74705SXin Li #endif 15*67e74705SXin Li 16*67e74705SXin Li enum numbers { 17*67e74705SXin Li zero, one, two, three, four 18*67e74705SXin Li }; 19*67e74705SXin Li 20*67e74705SXin Li typedef enum numbers (^myblock)(enum numbers); 21*67e74705SXin Li 22*67e74705SXin Li test(myblock I)23*67e74705SXin Lidouble test(myblock I) { 24*67e74705SXin Li return I(three); 25*67e74705SXin Li } 26*67e74705SXin Li main()27*67e74705SXin Liint main() { 28*67e74705SXin Li __block enum numbers x = one; 29*67e74705SXin Li __block enum numbers y = two; 30*67e74705SXin Li 31*67e74705SXin Li /* Breakpoint for first Block function. */ 32*67e74705SXin Li myblock CL = ^(enum numbers z) 33*67e74705SXin Li { enum numbers savex = x; 34*67e74705SXin Li { __block enum numbers x = savex; 35*67e74705SXin Li y = z; 36*67e74705SXin Li if (y != three) 37*67e74705SXin Li exit (6); 38*67e74705SXin Li test ( 39*67e74705SXin Li /* Breakpoint for second Block function. */ 40*67e74705SXin Li ^ (enum numbers z) { 41*67e74705SXin Li if (y != three) { 42*67e74705SXin Li exit(1); 43*67e74705SXin Li } 44*67e74705SXin Li if (x != one) 45*67e74705SXin Li exit(2); 46*67e74705SXin Li x = z; 47*67e74705SXin Li if (x != three) 48*67e74705SXin Li exit(3); 49*67e74705SXin Li if (y != three) 50*67e74705SXin Li exit(4); 51*67e74705SXin Li return (enum numbers) four; 52*67e74705SXin Li });} 53*67e74705SXin Li return x; 54*67e74705SXin Li }; 55*67e74705SXin Li 56*67e74705SXin Li enum numbers res = (enum numbers)test(CL); 57*67e74705SXin Li 58*67e74705SXin Li if (res != one) 59*67e74705SXin Li exit (5); 60*67e74705SXin Li return 0; 61*67e74705SXin Li } 62