[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / CodeGenObjC / local-static-block.m
blobef179c14d4f65a9778589066382fac836c0b5d78
1 // RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck %s
3 // CHECK: @ArrayRecurs = internal global
4 // CHECK: @FUNC.ArrayRecurs = internal global
5 // CHECK: @FUNC.ArrayRecurs.1 = internal global
6 // CHECK: @FUNC1.ArrayRecurs = internal global
8 @class NSArray;
10 static  NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {
12   for(id rawAddress in addresses)
13   {
14    NSArray *separatedAddresses = ((NSArray*)0);
15    separatedAddresses = ArrayRecurs((NSArray *)rawAddress, level+1);
16   }
17   return (NSArray *)0;
20 extern NSArray *address;
21 extern unsigned long level;
23 void FUNC(void)
25  ArrayRecurs(address, level);
27  static  NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {
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);
38  if (ArrayRecurs) {
39    static  NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {
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  }
52 void FUNC2(void) {
53   static void (^const block1)(int) = ^(int a){
54     if (a--)
55       block1(a);
56   };
59 // CHECK-LABEL: define{{.*}} void @FUNC2(
60 // CHECK: define internal void @_block_invoke{{.*}}(
61 // CHECK: call void %{{.*}}(ptr noundef @__block_literal_global{{.*}}, i32 noundef %{{.*}})
63 void FUNC1(void)
65  static  NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {
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);