blob: 00b0adf393e95fa21ced849963c87b73f9b0a7b2 [file] [log] [blame]
John McCallf85e1932011-06-15 23:02:42 +00001// RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-nonfragile-abi -triple x86_64-apple-darwin -O0 -emit-llvm %s -o %t-64.s
2// RUN: FileCheck -check-prefix LP64 --input-file=%t-64.s %s
3// rdar://9503326
4
5typedef void (^dispatch_block_t)(void);
6
7@class NSString;
8extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1, 2)));
9@class NSArray;
10
11int main (int argc, const char * argv[])
12{
13 NSArray *array;
14 for ( NSString *str in array) {
15 dispatch_block_t blk = ^{
16 NSLog(@"str in block: %@", str);
17 };
18 blk();
19 }
20 return 0;
21}
22
23// CHECK-LP64: define internal void @__main_block_invoke
24// CHECK-LP64: [[BLOCK:%.*]] = bitcast i8* {{%.*}} to [[BLOCK_T:%.*]]*
25// CHECK-LP64-NEXT: [[T0:%.*]] = getelementptr inbounds [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
26// CHECK-LP64-NEXT: [[T2:%.*]] = load [[OPAQUE_T:%.*]]** [[T0]], align 8
27// CHECK-LP64-NEXT: call void ([[OPAQUE_T]]*, ...)* @NSLog