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