|  | // 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 {{.*}}ptr{{.*}}dbg | 
|  | // CHECK: store {{.*}}ptr{{.*}}, align | 
|  | // CHECK: ret | 
|  | // CHECK: define {{.*}}block_invoke | 
|  | // CHECK-NOT: store {{.*}}ptr{{.*}}dbg | 
|  | // CHECK: store {{.*}}ptr{{.*}}, align | 
|  | // CHECK: ret | 
|  | // CHECK: define {{.*}}block_invoke | 
|  | // CHECK-NOT: store {{.*}}ptr{{.*}}dbg | 
|  | // CHECK: store {{.*}}ptr{{.*}}, 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; | 
|  | } |