1 | // RUN: %clang_cc1 -fblocks -fobjc-arc -fobjc-runtime-has-weak -debug-info-kind=limited -triple x86_64-apple-darwin -emit-llvm %s -o - | FileCheck %s |
2 | |
3 | // CHECK: !DILocalVariable(name: "foo", {{.*}}type: ![[FOOTY:[0-9]+]]) |
4 | // CHECK: ![[FOOTY]] = {{.*}}!DICompositeType({{.*}}, name: "Foo" |
5 | |
6 | // CHECK-NOT: DIFlagBlockByrefStruct |
7 | // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "__block_literal_1", |
8 | // CHECK-SAME: size: 320, elements: ![[BL_ELTS:[0-9]+]]) |
9 | // CHECK: ![[BL_ELTS]] = !{{.*}}![[WFOO:[0-9]+]]} |
10 | |
11 | // Test that the foo is aligned at an 8 byte boundary in the DWARF |
12 | // expression (256) that locates it inside of the byref descriptor: |
13 | // CHECK: ![[WFOO]] = !DIDerivedType(tag: DW_TAG_member, name: "foo", |
14 | // CHECK-SAME: baseType: ![[PTR:[0-9]+]] |
15 | // CHECK-SAME: offset: 256) |
16 | |
17 | // CHECK: ![[PTR]] = !DIDerivedType(tag: DW_TAG_pointer_type, |
18 | // CHECK-SAME: baseType: ![[WRAPPER:[0-9]+]] |
19 | // CHECK: ![[WRAPPER]] = !DICompositeType(tag: DW_TAG_structure_type, scope: |
20 | // CHECK: elements: ![[WR_ELTS:[0-9]+]]) |
21 | // CHECK: ![[WR_ELTS]] = !{{.*}}![[WFOO:[0-9]+]]} |
22 | // CHECK: ![[WFOO]] = !DIDerivedType(tag: DW_TAG_member, name: "foo", |
23 | // CHECK-SAME: baseType: ![[FOOTY]] |
24 | |
25 | // CHECK: !DILocalVariable(name: "foo", {{.*}}type: ![[FOOTY]]) |
26 | |
27 | |
28 | struct Foo { |
29 | unsigned char *data; |
30 | }; |
31 | int func() { |
32 | __attribute__((__blocks__(byref))) struct Foo foo; |
33 | ^{ foo.data = 0; }(); |
34 | return 0; |
35 | } |
36 | |