]>
Commit | Line | Data |
---|---|---|
f035d41b XL |
1 | // Verify debuginfo for async fn: |
2 | // - Each variant points to the file and line of its yield point | |
17df50a5 XL |
3 | // - The discriminants are marked artificial |
4 | // - Other fields are not marked artificial | |
f035d41b | 5 | // |
cdc7bbd5 | 6 | // |
f035d41b XL |
7 | // compile-flags: -C debuginfo=2 --edition=2018 |
8 | // ignore-msvc | |
9 | ||
10 | async fn foo() {} | |
11 | async fn async_fn_test() { | |
12 | foo().await; | |
13 | let s = String::from("foo"); | |
14 | foo().await; | |
15 | } | |
16 | ||
17 | // FIXME: No way to reliably check the filename. | |
18 | ||
19 | // CHECK-DAG: [[ASYNC_FN:!.*]] = !DINamespace(name: "async_fn_test" | |
17df50a5 | 20 | // CHECK-DAG: [[GEN:!.*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "generator-0", scope: [[ASYNC_FN]] |
f035d41b | 21 | // CHECK: [[VARIANT:!.*]] = !DICompositeType(tag: DW_TAG_variant_part, scope: [[ASYNC_FN]], |
17df50a5 | 22 | // CHECK-NOT: flags: DIFlagArtificial |
f035d41b XL |
23 | // CHECK-SAME: discriminator: [[DISC:![0-9]*]] |
24 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "0", scope: [[VARIANT]], | |
25 | // CHECK-SAME: file: [[FILE:![0-9]*]], line: 11, | |
17df50a5 XL |
26 | // CHECK-NOT: flags: DIFlagArtificial |
27 | // CHECK-SAME: ) | |
f035d41b | 28 | // CHECK: {{!.*}} = !DICompositeType(tag: DW_TAG_structure_type, name: "Unresumed", scope: [[GEN]], |
17df50a5 XL |
29 | // CHECK-NOT: flags: DIFlagArtificial |
30 | // CHECK-SAME: ) | |
f035d41b XL |
31 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "1", scope: [[VARIANT]], |
32 | // CHECK-SAME: file: [[FILE]], line: 15, | |
17df50a5 XL |
33 | // CHECK-NOT: flags: DIFlagArtificial |
34 | // CHECK-SAME: ) | |
f035d41b XL |
35 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "2", scope: [[VARIANT]], |
36 | // CHECK-SAME: file: [[FILE]], line: 15, | |
17df50a5 XL |
37 | // CHECK-NOT: flags: DIFlagArtificial |
38 | // CHECK-SAME: ) | |
f035d41b XL |
39 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "3", scope: [[VARIANT]], |
40 | // CHECK-SAME: file: [[FILE]], line: 12, | |
17df50a5 XL |
41 | // CHECK-NOT: flags: DIFlagArtificial |
42 | // CHECK-SAME: ) | |
f035d41b XL |
43 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "4", scope: [[VARIANT]], |
44 | // CHECK-SAME: file: [[FILE]], line: 14, | |
17df50a5 XL |
45 | // CHECK-NOT: flags: DIFlagArtificial |
46 | // CHECK-SAME: ) | |
f035d41b | 47 | // CHECK: [[S1:!.*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "Suspend1", scope: [[GEN]], |
17df50a5 XL |
48 | // CHECK-NOT: flags: DIFlagArtificial |
49 | // CHECK-SAME: ) | |
f035d41b XL |
50 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: [[S1]] |
51 | // CHECK-NOT: flags: DIFlagArtificial | |
52 | // CHECK-SAME: ) | |
53 | // CHECK: [[DISC]] = !DIDerivedType(tag: DW_TAG_member, name: "__state", scope: [[ASYNC_FN]], | |
54 | // CHECK-SAME: flags: DIFlagArtificial | |
55 | ||
56 | fn main() { | |
57 | let _dummy = async_fn_test(); | |
58 | } |