1 // RUN: %clang_cc1 %s -emit-llvm -o - -fblocks -triple x86_64-apple-darwin10 -std=c++11 | FileCheck %s 2 3 void bar() { 4 // CHECK-DAG: @__FUNCTION__.___Z3barv_block_invoke = private unnamed_addr constant [17 x i8] c"bar_block_invoke\00", align 1 5 const char * (^block1)() = ^() { 6 return __FUNCTION__; 7 }; 8 // CHECK-DAG: @__FUNCTION__.___Z3barv_block_invoke_2 = private unnamed_addr constant [19 x i8] c"bar_block_invoke_2\00", align 1 9 const char * (^block2)() = ^() { 10 return __FUNCTION__; 11 }; 12 } 13 14 void baz() { 15 // CHECK-DAG: @__PRETTY_FUNCTION__.___Z3bazv_block_invoke = private unnamed_addr constant [24 x i8] c"void baz()_block_invoke\00", align 1 16 const char * (^block1)() = ^() { 17 return __PRETTY_FUNCTION__; 18 }; 19 // CHECK-DAG: @__PRETTY_FUNCTION__.___Z3bazv_block_invoke_2 = private unnamed_addr constant [26 x i8] c"void baz()_block_invoke_2\00", align 1 20 const char * (^block2)() = ^() { 21 return __PRETTY_FUNCTION__; 22 }; 23 } 24 25 namespace foonamespace { 26 class Foo { 27 public: 28 Foo() { 29 // CHECK-DAG: @__PRETTY_FUNCTION__.___ZN12foonamespace3FooC2Ev_block_invoke = private unnamed_addr constant [38 x i8] c"foonamespace::Foo::Foo()_block_invoke\00", align 1 30 const char * (^block1)() = ^() { 31 return __PRETTY_FUNCTION__; 32 }; 33 // CHECK-DAG: @__PRETTY_FUNCTION__.___ZN12foonamespace3FooC2Ev_block_invoke_2 = private unnamed_addr constant [40 x i8] c"foonamespace::Foo::Foo()_block_invoke_2\00", align 1 34 const char * (^block2)() = ^() { 35 return __PRETTY_FUNCTION__; 36 }; 37 // CHECK-DAG: @__func__.___ZN12foonamespace3FooC2Ev_block_invoke_3 = private unnamed_addr constant [19 x i8] c"Foo_block_invoke_3\00", align 1 38 const char * (^block3)() = ^() { 39 return __func__; 40 }; 41 bar(); 42 inside_lambda(); 43 } 44 ~Foo() { 45 // CHECK-DAG: @__func__.___ZN12foonamespace3FooD2Ev_block_invoke = private unnamed_addr constant [18 x i8] c"~Foo_block_invoke\00", align 1 46 const char * (^block1)() = ^() { 47 return __func__; 48 }; 49 // CHECK-DAG: @__PRETTY_FUNCTION__.___ZN12foonamespace3FooD2Ev_block_invoke_2 = private unnamed_addr constant [41 x i8] c"foonamespace::Foo::~Foo()_block_invoke_2\00", align 1 50 const char * (^block2)() = ^() { 51 return __PRETTY_FUNCTION__; 52 }; 53 } 54 void bar() { 55 // CHECK-DAG: @__PRETTY_FUNCTION__.___ZN12foonamespace3Foo3barEv_block_invoke = private unnamed_addr constant [43 x i8] c"void foonamespace::Foo::bar()_block_invoke\00", align 1 56 const char * (^block1)() = ^() { 57 return __PRETTY_FUNCTION__; 58 }; 59 // CHECK-DAG: @__PRETTY_FUNCTION__.___ZN12foonamespace3Foo3barEv_block_invoke_2 = private unnamed_addr constant [45 x i8] c"void foonamespace::Foo::bar()_block_invoke_2\00", align 1 60 const char * (^block2)() = ^() { 61 return __PRETTY_FUNCTION__; 62 }; 63 // CHECK-DAG: @__func__.___ZN12foonamespace3Foo3barEv_block_invoke_3 = private unnamed_addr constant [19 x i8] c"bar_block_invoke_3\00", align 1 64 const char * (^block3)() = ^() { 65 return __func__; 66 }; 67 } 68 void inside_lambda() { 69 auto lambda = []() { 70 // CHECK-DAG: @__PRETTY_FUNCTION__.___ZZN12foonamespace3Foo13inside_lambdaEvENKUlvE_clEv_block_invoke = private unnamed_addr constant [92 x i8] c"auto foonamespace::Foo::inside_lambda()::(anonymous class)::operator()() const_block_invoke\00", align 1 71 const char * (^block1)() = ^() { 72 return __PRETTY_FUNCTION__; 73 }; 74 // CHECK-DAG: @__PRETTY_FUNCTION__.___ZZN12foonamespace3Foo13inside_lambdaEvENKUlvE_clEv_block_invoke_2 = private unnamed_addr constant [94 x i8] c"auto foonamespace::Foo::inside_lambda()::(anonymous class)::operator()() const_block_invoke_2\00", align 1 75 const char * (^block2)() = ^() { 76 return __PRETTY_FUNCTION__; 77 }; 78 // CHECK-DAG: @__func__.___ZZN12foonamespace3Foo13inside_lambdaEvENKUlvE_clEv_block_invoke_3 = private unnamed_addr constant [26 x i8] c"operator()_block_invoke_3\00", align 1 79 const char * (^block3)() = ^() { 80 return __func__; 81 }; 82 }; 83 lambda(); 84 } 85 }; 86 Foo f; 87 } 88