76 lines · plain
1// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck %s2 3// CHECK: @ArrayRecurs = internal global4// CHECK: @FUNC.ArrayRecurs = internal global5// CHECK: @FUNC.ArrayRecurs.1 = internal global6// CHECK: @FUNC1.ArrayRecurs = internal global7 8@class NSArray;9 10static NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {11 12 for(id rawAddress in addresses)13 {14 NSArray *separatedAddresses = ((NSArray*)0);15 separatedAddresses = ArrayRecurs((NSArray *)rawAddress, level+1);16 }17 return (NSArray *)0;18};19 20extern NSArray *address;21extern unsigned long level;22 23void FUNC(void)24{25 ArrayRecurs(address, level);26 27 static NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {28 29 for(id rawAddress in addresses)30 {31 NSArray *separatedAddresses = ((NSArray*)0);32 separatedAddresses = ArrayRecurs((NSArray *)rawAddress, level+1);33 }34 return (NSArray *)0;35 };36 ArrayRecurs(address, level);37 38 if (ArrayRecurs) {39 static NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {40 41 for(id rawAddress in addresses)42 {43 NSArray *separatedAddresses = ((NSArray*)0);44 separatedAddresses = ArrayRecurs((NSArray *)rawAddress, level+1);45 }46 return (NSArray *)0;47 };48 ArrayRecurs(address, level);49 }50}51 52void FUNC2(void) {53 static void (^const block1)(int) = ^(int a){54 if (a--)55 block1(a);56 };57}58 59// CHECK-LABEL: define{{.*}} void @FUNC2(60// CHECK: define internal void @_block_invoke{{.*}}(61// CHECK: call void %{{.*}}(ptr noundef @__block_literal_global{{.*}}, i32 noundef %{{.*}})62 63void FUNC1(void)64{65 static NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {66 67 for(id rawAddress in addresses)68 {69 NSArray *separatedAddresses = ((NSArray*)0);70 separatedAddresses = ArrayRecurs((NSArray *)rawAddress, level+1);71 }72 return (NSArray *)0;73 };74 ArrayRecurs(address, level);75}76