1// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck %s 2 3// CHECK: @ArrayRecurs = internal global 4// CHECK: @FUNC.ArrayRecurs = internal global 5// CHECK: @FUNC.ArrayRecurs.1 = internal global 6// CHECK: @FUNC1.ArrayRecurs = internal global 7 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