From cc4f214a785643198dbaf34d21b2b0836ff3dda6 Mon Sep 17 00:00:00 2001 From: Matt Weber <30441572+mweber15@users.noreply.github.com> Date: Sat, 21 Jan 2023 13:57:16 -0500 Subject: [PATCH] Split metadata testing into multiple files This helps with the fact that the order in which debuginfo is emitted differs between platforms, and is probably not guaranteed to be stable in general. --- .../codegen/issue-98678-closure-generator.rs | 18 ++++++++ tests/codegen/issue-98678-cpp-like-enum.rs | 17 +++++++ tests/codegen/issue-98678-native-enum.rs | 16 +++++++ tests/codegen/issue-98678-struct-union.rs | 23 ++++++++++ tests/codegen/issue-98678.rs | 46 ------------------- 5 files changed, 74 insertions(+), 46 deletions(-) create mode 100644 tests/codegen/issue-98678-closure-generator.rs create mode 100644 tests/codegen/issue-98678-cpp-like-enum.rs create mode 100644 tests/codegen/issue-98678-native-enum.rs create mode 100644 tests/codegen/issue-98678-struct-union.rs delete mode 100644 tests/codegen/issue-98678.rs diff --git a/tests/codegen/issue-98678-closure-generator.rs b/tests/codegen/issue-98678-closure-generator.rs new file mode 100644 index 000000000000..b24f6e21c93e --- /dev/null +++ b/tests/codegen/issue-98678-closure-generator.rs @@ -0,0 +1,18 @@ +// This test verifies the accuracy of emitted file and line debuginfo metadata for closures and +// generators. +// +// compile-flags: -C debuginfo=2 +#![crate_type = "lib"] +#![feature(generators, stmt_expr_attributes)] + +// CHECK: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/codegen/issue-98678-closure-generator.rs{{".*}}) + +pub fn foo() { + // CHECK: !DICompositeType({{.*"[{]}}closure_env#0{{[}]".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], + let closure = |x| x; + closure(0); + + // CHECK: !DICompositeType({{.*"[{]}}generator_env#1{{[}]".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], + let generator = #[coroutine] + || yield 1; +} diff --git a/tests/codegen/issue-98678-cpp-like-enum.rs b/tests/codegen/issue-98678-cpp-like-enum.rs new file mode 100644 index 000000000000..30ea6cd9577a --- /dev/null +++ b/tests/codegen/issue-98678-cpp-like-enum.rs @@ -0,0 +1,17 @@ +// This test verifies the accuracy of emitted file and line debuginfo metadata for C++-like +// enumerations. +// +// compile-flags: -C debuginfo=2 +#![crate_type = "lib"] + +// The use of CHECK-DAG here is because the C++-like enum is emitted before the `DIFile` node + +// CHECK-DAG: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/codegen/issue-98678-cpp-like-enum.rs{{".*}}) + +// CHECK-DAG: !DICompositeType({{.*"}}MyCppLikeEnum{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]], +#[repr(C)] +pub enum MyCppLikeEnum { + One, +} + +pub fn foo(_: MyCppLikeEnum) {} diff --git a/tests/codegen/issue-98678-native-enum.rs b/tests/codegen/issue-98678-native-enum.rs new file mode 100644 index 000000000000..073cc60f77a4 --- /dev/null +++ b/tests/codegen/issue-98678-native-enum.rs @@ -0,0 +1,16 @@ +// This test verifies the accuracy of emitted file and line debuginfo metadata for native +// enumerations. +// +// compile-flags: -C debuginfo=2 +#![crate_type = "lib"] + +// CHECK: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/codegen/issue-98678-native-enum.rs{{".*}}) + +// CHECK: !DICompositeType({{.*"}}MyNativeEnum{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]], +// CHECK: !DICompositeType({{.*}}DW_TAG_variant_part{{.*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], +pub enum MyNativeEnum { + // CHECK: !DIDerivedType({{.*"}}One{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], + One, +} + +pub fn foo(_: MyNativeEnum) {} diff --git a/tests/codegen/issue-98678-struct-union.rs b/tests/codegen/issue-98678-struct-union.rs new file mode 100644 index 000000000000..4b6106eb1da8 --- /dev/null +++ b/tests/codegen/issue-98678-struct-union.rs @@ -0,0 +1,23 @@ +// This test verifies the accuracy of emitted file and line debuginfo metadata for structs and +// unions. +// +// compile-flags: -C debuginfo=2 +#![crate_type = "lib"] + +// CHECK: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/codegen/issue-98678-struct-union.rs{{".*}}) + +// CHECK: !DICompositeType({{.*"}}MyType{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], +pub struct MyType { + // CHECK: !DIDerivedType({{.*"}}i{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], + i: i32, +} + +// CHECK: !DICompositeType({{.*"}}MyUnion{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], +pub union MyUnion { + // CHECK: !DIDerivedType({{.*"}}i{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], + i: i32, + // CHECK: !DIDerivedType({{.*"}}f{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], + f: f32, +} + +pub fn foo(_: MyType, _: MyUnion) {} diff --git a/tests/codegen/issue-98678.rs b/tests/codegen/issue-98678.rs deleted file mode 100644 index ab4e085a317a..000000000000 --- a/tests/codegen/issue-98678.rs +++ /dev/null @@ -1,46 +0,0 @@ -// This test verifies the accuracy of emitted file and line debuginfo metadata. -// -// compile-flags: -C debuginfo=2 -#![crate_type = "lib"] -#![feature(generators, stmt_expr_attributes)] - -// The use of CHECK-DAG here is because the C++-like enum is emitted before the `DIFile` node - -// CHECK-DAG: ![[#FILE:]] = !DIFile({{.*}}filename:{{.*}}/codegen/issue-98678.rs{{".*}}) - -// CHECK-DAG: !DICompositeType({{.*"}}MyCppLikeEnum{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]], -#[repr(C)] -pub enum MyCppLikeEnum { - One, -} - -// CHECK: !DICompositeType({{.*"}}MyType{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], -pub struct MyType { - // CHECK: !DIDerivedType({{.*"}}i{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], - i: i32, -} - -// CHECK: !DICompositeType({{.*"}}MyUnion{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], -pub union MyUnion { - // CHECK: !DIDerivedType({{.*"}}i{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], - i: i32, - // CHECK: !DIDerivedType({{.*"}}f{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], - f: f32, -} - -// CHECK: !DICompositeType({{.*"}}MyNativeEnum{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 2]], -// CHECK: !DICompositeType({{.*}}DW_TAG_variant_part{{.*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], -pub enum MyNativeEnum { - // CHECK: !DIDerivedType({{.*"}}One{{".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], - One, -} - -pub fn foo(_: MyType, _: MyUnion, _: MyNativeEnum, _: MyCppLikeEnum) { - // CHECK: !DICompositeType({{.*"[{]}}closure_env#0{{[}]".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], - let closure = |x| x; - closure(0); - - // CHECK: !DICompositeType({{.*"[{]}}generator_env#1{{[}]".*}}file: ![[#FILE]]{{.*}}line: [[# @LINE + 1]], - let generator = #[coroutine] - || yield 1; -}