xref: /llvm-project/clang/test/CodeGenObjC/local-static-block.m (revision 0f1c1be1968076d6f96f8a7bcc4a15cf195ecd97)
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