1 // RUN: %clang_cc1 -fblocks -debug-info-kind=limited -emit-llvm %s -o - | FileCheck %s 2 // Make sure we do not generate line info for debugging-related frame setup. 3 // CHECK: define {{.*}}block_invoke 4 // CHECK-NOT: store {{.*}}%struct.__block_descriptor*{{.*}}dbg 5 // CHECK: store {{.*}}%struct.__block_descriptor*{{.*}}, align 6 // CHECK: ret 7 // CHECK: define {{.*}}block_invoke 8 // CHECK-NOT: store {{.*}}%struct.__block_descriptor*{{.*}}dbg 9 // CHECK: store {{.*}}%struct.__block_descriptor*{{.*}}, align 10 // CHECK: ret 11 // CHECK: define {{.*}}block_invoke 12 // CHECK-NOT: store {{.*}}%struct.__block_descriptor*{{.*}}dbg 13 // CHECK: store {{.*}}%struct.__block_descriptor*{{.*}}, align 14 // CHECK: ret 15 int printf(const char*, ...); 16 17 static void* _NSConcreteGlobalBlock; 18 19 20 typedef void (^ HelloBlock_t)(const char * name); 21 22 /* Breakpoint for first Block function. */ 23 HelloBlock_t helloBlock = ^(const char * name) { 24 printf("Hello there, %s!\n", name); 25 }; 26 27 /* Breakpoint for second Block function. */ 28 static HelloBlock_t s_helloBlock = ^(const char * name) { 29 printf("Hello there, %s!\n", name); 30 }; 31 32 /* Breakpoint for third Block function. */ 33 int X = 1234; 34 int (^CP)(void) = ^{ X = X+1; return X; }; 35 36 int 37 main(int argc, char * argv[]) 38 { 39 helloBlock("world"); 40 s_helloBlock("world"); 41 42 CP(); 43 printf ("X = %d\n", X); 44 return X - 1235; 45 } 46