1*67e74705SXin Li // RUN: %clang_cc1 %s -triple x86_64-linux -emit-llvm -fblocks -o - | FileCheck %s 2*67e74705SXin Li // rdar://5865221 3*67e74705SXin Li 4*67e74705SXin Li // These will be inlined by the optimizers provided the block descriptors 5*67e74705SXin Li // and block literals are internal constants. 6*67e74705SXin Li // CHECK: @__block_descriptor_tmp = internal constant 7*67e74705SXin Li // CHECK: @__block_literal_global = internal constant 8*67e74705SXin Li // CHECK: @__block_descriptor_tmp.2 = internal constant 9*67e74705SXin Li // CHECK: @__block_literal_global.3 = internal constant fun(int x)10*67e74705SXin Listatic int fun(int x) { 11*67e74705SXin Li return x+1; 12*67e74705SXin Li } 13*67e74705SXin Li block(int x)14*67e74705SXin Listatic int block(int x) { 15*67e74705SXin Li return (^(int x){return x+1;})(x); 16*67e74705SXin Li } 17*67e74705SXin Li print(int result)18*67e74705SXin Listatic void print(int result) { 19*67e74705SXin Li printf("%d\n", result); 20*67e74705SXin Li } 21*67e74705SXin Li main(int argc,const char * argv[])22*67e74705SXin Liint main (int argc, const char * argv[]) { 23*67e74705SXin Li int x = argc-1; 24*67e74705SXin Li print(fun(x)); 25*67e74705SXin Li print(block(x)); 26*67e74705SXin Li int (^block_inline)(int) = ^(int x){return x+1;}; 27*67e74705SXin Li print(block_inline(x)); 28*67e74705SXin Li return 0; 29*67e74705SXin Li } 30