]>
Commit | Line | Data |
---|---|---|
f035d41b XL |
1 | // Verify debuginfo for generators: |
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 |
8 | // only-msvc | |
9 | ||
10 | #![feature(generators, generator_trait)] | |
11 | use std::ops::Generator; | |
12 | ||
13 | fn generator_test() -> impl Generator<Yield = i32, Return = ()> { | |
14 | || { | |
15 | yield 0; | |
16 | let s = String::from("foo"); | |
17 | yield 1; | |
18 | } | |
19 | } | |
20 | ||
21 | // FIXME: No way to reliably check the filename. | |
22 | ||
5e7ed085 | 23 | // CHECK-DAG: [[GEN:!.*]] = !DICompositeType(tag: DW_TAG_union_type, name: "enum$<generator_debug_msvc::generator_test::generator_env$0>" |
17df50a5 | 24 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "variant0", scope: [[GEN]], |
f035d41b XL |
25 | // For brevity, we only check the struct name and members of the last variant. |
26 | // CHECK-SAME: file: [[FILE:![0-9]*]], line: 14, | |
17df50a5 XL |
27 | // CHECK-NOT: flags: DIFlagArtificial |
28 | // CHECK-SAME: ) | |
29 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "variant1", scope: [[GEN]], | |
f035d41b | 30 | // CHECK-SAME: file: [[FILE]], line: 18, |
17df50a5 XL |
31 | // CHECK-NOT: flags: DIFlagArtificial |
32 | // CHECK-SAME: ) | |
33 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "variant2", scope: [[GEN]], | |
f035d41b | 34 | // CHECK-SAME: file: [[FILE]], line: 18, |
17df50a5 XL |
35 | // CHECK-NOT: flags: DIFlagArtificial |
36 | // CHECK-SAME: ) | |
37 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "variant3", scope: [[GEN]], | |
f035d41b | 38 | // CHECK-SAME: file: [[FILE]], line: 15, |
17df50a5 XL |
39 | // CHECK-NOT: flags: DIFlagArtificial |
40 | // CHECK-SAME: ) | |
41 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "variant4", scope: [[GEN]], | |
f035d41b XL |
42 | // CHECK-SAME: file: [[FILE]], line: 17, |
43 | // CHECK-SAME: baseType: [[VARIANT:![0-9]*]] | |
17df50a5 XL |
44 | // CHECK-NOT: flags: DIFlagArtificial |
45 | // CHECK-SAME: ) | |
5e7ed085 | 46 | // CHECK: [[VARIANT]] = !DICompositeType(tag: DW_TAG_structure_type, name: "Suspend1", scope: [[GEN]], |
17df50a5 XL |
47 | // CHECK-NOT: flags: DIFlagArtificial |
48 | // CHECK-SAME: ) | |
5e7ed085 | 49 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: [[VARIANT]] |
f035d41b XL |
50 | // CHECK-NOT: flags: DIFlagArtificial |
51 | // CHECK-SAME: ) | |
136023e0 XL |
52 | // CHECK: {{!.*}} = !DIDerivedType(tag: DW_TAG_member, name: "discriminant", scope: [[GEN]], |
53 | // CHECK-NOT: flags: DIFlagArtificial | |
f035d41b XL |
54 | |
55 | fn main() { | |
56 | let _dummy = generator_test(); | |
57 | } |