| // RUN: %clang_cc1 -fblocks -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s | 
 | // Make sure we do not generate line info for debugging-related frame setup. | 
 | // CHECK: define {{.*}}block_invoke | 
 | // CHECK-NOT: store {{.*}}%struct.__block_descriptor*{{.*}}dbg | 
 | // CHECK: store {{.*}}%struct.__block_descriptor*{{.*}}, align | 
 | // CHECK: ret | 
 | // CHECK: define {{.*}}block_invoke | 
 | // CHECK-NOT: store {{.*}}%struct.__block_descriptor*{{.*}}dbg | 
 | // CHECK: store {{.*}}%struct.__block_descriptor*{{.*}}, align | 
 | // CHECK: ret | 
 | // CHECK: define {{.*}}block_invoke | 
 | // CHECK-NOT: store {{.*}}%struct.__block_descriptor*{{.*}}dbg | 
 | // CHECK: store {{.*}}%struct.__block_descriptor*{{.*}}, align | 
 | // CHECK: ret | 
 | int printf(const char*, ...); | 
 |  | 
 | static void* _NSConcreteGlobalBlock; | 
 |  | 
 |  | 
 | typedef void (^ HelloBlock_t)(const char * name); | 
 |  | 
 |   /* Breakpoint for first Block function.  */ | 
 | HelloBlock_t helloBlock = ^(const char * name) { | 
 |   printf("Hello there, %s!\n", name); | 
 | }; | 
 |  | 
 |   /* Breakpoint for second Block function.  */ | 
 | static HelloBlock_t s_helloBlock = ^(const char * name) { | 
 |   printf("Hello there, %s!\n", name); | 
 | }; | 
 |  | 
 | /* Breakpoint for third Block function.  */ | 
 | int X = 1234; | 
 | int (^CP)(void) = ^{ X = X+1;  return X; }; | 
 |  | 
 | int | 
 | main(int argc, char * argv[]) | 
 | { | 
 |   helloBlock("world"); | 
 |   s_helloBlock("world"); | 
 |  | 
 |   CP(); | 
 |   printf ("X = %d\n", X); | 
 |   return X - 1235; | 
 | } |