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