// RUN: %clang_cc1 -fblocks -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s
// Ensure that we generate a line table entry for the block cleanup.
// CHECK: define {{.*}} @__main_block_invoke
// CHECK: _NSConcreteStackBlock
// CHECK: = bitcast {{.*}}, !dbg ![[L1:[0-9]+]]
// CHECK-NOT:  call {{.*}} @_Block_object_dispose{{.*}}, !dbg ![[L1]]
// CHECK: ret

void * _NSConcreteStackBlock;
#ifdef __cplusplus
extern "C" void exit(int);
#else
extern void exit(int);
#endif

enum numbers {
  zero, one, two, three, four
};

typedef enum numbers (^myblock)(enum numbers);


double test(myblock I) {
  return I(three);
}

int main() {
  __block enum numbers x = one;
  __block enum numbers y = two;

  /* Breakpoint for first Block function.  */
  myblock CL = ^(enum numbers z)
    { enum numbers savex = x;
      { __block enum numbers x = savex;
	y = z;
	if (y != three)
	  exit (6);
	test (
	      /* Breakpoint for second Block function.  */
	      ^ (enum numbers z) {
		if (y != three) {
		  exit(1);
		}
		if (x != one)
		  exit(2);
		x = z;
		if (x != three)
		  exit(3);
		if (y != three)
		  exit(4);
		return (enum numbers) four;
	      });}
      return x;
    };

  enum numbers res = (enum numbers)test(CL);

  if (res != one)
    exit (5);
  return 0;
}
