// 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; } |