1 // RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple x86_64-apple-darwin -O0 -print-ivar-layout -emit-llvm -o /dev/null %s > %t-64.layout
2 // RUN: FileCheck --input-file=%t-64.layout %s
3 // RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -triple i386-apple-darwin -O0 -print-ivar-layout -emit-llvm -o /dev/null %s > %t-32.layout
4 // RUN: FileCheck -check-prefix=CHECK-i386 --input-file=%t-32.layout %s
10 extern id opaque_id();
13 __block int byref_int = 0;
14 const id bar = (id) opaque_id();
16 __strong id strong_void_sta;
17 __block id byref_bab = (id)0;
20 // CHECK: Inline instruction for block variable layout: 0x0100
21 // CHECK-i386: Inline instruction for block variable layout: 0x0100
26 // CHECK: Inline instruction for block variable layout: 0x0210
27 // CHECK-i386: Inline instruction for block variable layout: 0x0210
34 // CHECK: Inline instruction for block variable layout: 0x0230
35 // CHECK-i386: Inline instruction for block variable layout: 0x0230
44 // CHECK: Inline instruction for block variable layout: 0x0231
45 // CHECK-i386: Inline instruction for block variable layout: 0x0231
56 // CHECK: Inline instruction for block variable layout: 0x0235
57 // CHECK-i386: Inline instruction for block variable layout: 0x0235
58 __weak id wid1, wid2, wid3, wid4;
72 // CHECK: Inline instruction for block variable layout: 0x035
73 // CHECK-i386: Inline instruction for block variable layout: 0x035
85 // CHECK: Inline instruction for block variable layout: 0x01
86 // CHECK-i386: Inline instruction for block variable layout: 0x01
91 // CHECK: Inline instruction for block variable layout: 0x020
92 // CHECK-i386: Inline instruction for block variable layout: 0x020
98 // CHECK: Inline instruction for block variable layout: 0x0102
99 // CHECK-i386: Inline instruction for block variable layout: 0x0102
109 extern void NSLog(NSString *format, ...);
110 typedef void (^dispatch_block_t)(void);
112 __strong NSString *s1 = 0;
113 __strong NSString *s2 = 0;
114 __weak NSString *w1 = 0;
117 // CHECK: Inline instruction for block variable layout: 0x0201
118 // CHECK-i386: Inline instruction for block variable layout: 0x0201
119 dispatch_block_t block2 = ^{
120 NSLog(@"%@, %@, %@", s1, w1, s2);