From a38c78c4616d6032af37739fad903e842a52e290 Mon Sep 17 00:00:00 2001 From: Kivooeo Date: Sun, 29 Jun 2025 17:39:08 +0500 Subject: moved tests --- tests/ui/parser/multiline-comments-basic.rs | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 tests/ui/parser/multiline-comments-basic.rs (limited to 'tests/ui/parser/multiline-comments-basic.rs') diff --git a/tests/ui/parser/multiline-comments-basic.rs b/tests/ui/parser/multiline-comments-basic.rs new file mode 100644 index 00000000000..98174882032 --- /dev/null +++ b/tests/ui/parser/multiline-comments-basic.rs @@ -0,0 +1,6 @@ +//@ run-pass + +/* + * This is a multi-line oldcomment. + */ +pub fn main() { } -- cgit 1.4.1-3-g733a5 From 1e3a2b2d4aa0ae75f9331c950b7346b1a017d4d9 Mon Sep 17 00:00:00 2001 From: Kivooeo Date: Sun, 29 Jun 2025 17:43:51 +0500 Subject: cleaned up some tests --- tests/ui/codegen/mono-respects-abi-alignment.rs | 40 ++++++++++++---------- tests/ui/codegen/msvc-opt-level-z-no-corruption.rs | 20 +++++++---- tests/ui/linkage-attr/msvc-static-data-import.rs | 16 +++++++-- tests/ui/parser/multiline-comments-basic.rs | 8 +++-- tests/ui/parser/unicode-multibyte-chars-no-ice.rs | 6 ++-- 5 files changed, 57 insertions(+), 33 deletions(-) (limited to 'tests/ui/parser/multiline-comments-basic.rs') diff --git a/tests/ui/codegen/mono-respects-abi-alignment.rs b/tests/ui/codegen/mono-respects-abi-alignment.rs index 62df1aca357..045d82b761f 100644 --- a/tests/ui/codegen/mono-respects-abi-alignment.rs +++ b/tests/ui/codegen/mono-respects-abi-alignment.rs @@ -1,19 +1,20 @@ -//@ run-pass +//! Test that monomorphization correctly distinguishes types with different ABI alignment. +//! +//! On x86_64-linux-gnu and similar platforms, structs get 8-byte "preferred" +//! alignment, but their "ABI" alignment (what actually matters for data layout) +//! is the largest alignment of any field. If monomorphization incorrectly uses +//! "preferred" alignment instead of "ABI" alignment, it might unify types `A` +//! and `B` even though `S` and `S` have field `t` at different offsets, +//! leading to incorrect method dispatch for `unwrap()`. -#![allow(non_upper_case_globals)] -#![allow(dead_code)] -/*! - * On x86_64-linux-gnu and possibly other platforms, structs get 8-byte "preferred" alignment, - * but their "ABI" alignment (i.e., what actually matters for data layout) is the largest alignment - * of any field. (Also, `u64` has 8-byte ABI alignment; this is not always true). - * - * On such platforms, if monomorphize uses the "preferred" alignment, then it will unify - * `A` and `B`, even though `S` and `S` have the field `t` at different offsets, - * and apply the wrong instance of the method `unwrap`. - */ +//@ run-pass #[derive(Copy, Clone)] -struct S { i:u8, t:T } +struct S { + #[allow(dead_code)] + i: u8, + t: T, +} impl S { fn unwrap(self) -> T { @@ -22,14 +23,15 @@ impl S { } #[derive(Copy, Clone, PartialEq, Debug)] -struct A((u32, u32)); +struct A((u32, u32)); // Different ABI alignment than B #[derive(Copy, Clone, PartialEq, Debug)] -struct B(u64); +struct B(u64); // Different ABI alignment than A pub fn main() { - static Ca: S = S { i: 0, t: A((13, 104)) }; - static Cb: S = S { i: 0, t: B(31337) }; - assert_eq!(Ca.unwrap(), A((13, 104))); - assert_eq!(Cb.unwrap(), B(31337)); + static CA: S = S { i: 0, t: A((13, 104)) }; + static CB: S = S { i: 0, t: B(31337) }; + + assert_eq!(CA.unwrap(), A((13, 104))); + assert_eq!(CB.unwrap(), B(31337)); } diff --git a/tests/ui/codegen/msvc-opt-level-z-no-corruption.rs b/tests/ui/codegen/msvc-opt-level-z-no-corruption.rs index c1be168a05d..ba97acec822 100644 --- a/tests/ui/codegen/msvc-opt-level-z-no-corruption.rs +++ b/tests/ui/codegen/msvc-opt-level-z-no-corruption.rs @@ -1,12 +1,18 @@ -// A previously outdated version of LLVM caused compilation failures on Windows -// specifically with optimization level `z`. After the update to a more recent LLVM -// version, this test checks that compilation and execution both succeed. -// See https://github.com/rust-lang/rust/issues/45034 +//! Test that opt-level=z produces correct code on Windows MSVC targets. +//! +//! A previously outdated version of LLVM caused compilation failures and +//! generated invalid code on Windows specifically with optimization level `z`. +//! The bug manifested as corrupted base pointers due to incorrect register +//! usage in the generated assembly (e.g., `popl %esi` corrupting local variables). +//! After updating to a more recent LLVM version, this test ensures that +//! compilation and execution both succeed with opt-level=z. +//! +//! Regression test for . //@ ignore-cross-compile // Reason: the compiled binary is executed //@ only-windows -// Reason: the observed bug only occurs on Windows +// Reason: the observed bug only occurred on Windows MSVC targets //@ run-pass //@ compile-flags: -C opt-level=z @@ -20,8 +26,8 @@ fn foo(x: i32, y: i32) -> i64 { #[inline(never)] fn bar() { let _f = Box::new(0); - // This call used to trigger an LLVM bug in opt-level z where the base - // pointer gets corrupted, see issue #45034 + // This call used to trigger an LLVM bug in opt-level=z where the base + // pointer gets corrupted due to incorrect register allocation let y: fn(i32, i32) -> i64 = test::black_box(foo); test::black_box(y(1, 2)); } diff --git a/tests/ui/linkage-attr/msvc-static-data-import.rs b/tests/ui/linkage-attr/msvc-static-data-import.rs index 15d799085fe..e53eb404ef6 100644 --- a/tests/ui/linkage-attr/msvc-static-data-import.rs +++ b/tests/ui/linkage-attr/msvc-static-data-import.rs @@ -1,8 +1,18 @@ +//! Test that static data from external crates can be imported on MSVC targets. +//! +//! On Windows MSVC targets, static data from external rlibs must be imported +//! through `__imp_` stubs to ensure proper linking. Without this, +//! the linker would fail with "unresolved external symbol" errors when trying +//! to reference static data from another crate. +//! +//! Regression test for . +//! Fixed in . + //@ run-pass -//@ aux-build:msvc-data-only-lib.rs +//@ aux-build:msvc-static-data-import-lib.rs -extern crate msvc_data_only_lib; +extern crate msvc_static_data_import_lib; fn main() { - println!("The answer is {} !", msvc_data_only_lib::FOO); + println!("The answer is {}!", msvc_static_data_import_lib::FOO); } diff --git a/tests/ui/parser/multiline-comments-basic.rs b/tests/ui/parser/multiline-comments-basic.rs index 98174882032..1aa2a531f5c 100644 --- a/tests/ui/parser/multiline-comments-basic.rs +++ b/tests/ui/parser/multiline-comments-basic.rs @@ -1,6 +1,10 @@ +//! Test that basic multiline comments are parsed correctly. +//! +//! Feature implementation test for . + //@ run-pass /* - * This is a multi-line oldcomment. + * This is a multi-line comment. */ -pub fn main() { } +pub fn main() {} diff --git a/tests/ui/parser/unicode-multibyte-chars-no-ice.rs b/tests/ui/parser/unicode-multibyte-chars-no-ice.rs index d585a791fb9..b1bb0c66ae2 100644 --- a/tests/ui/parser/unicode-multibyte-chars-no-ice.rs +++ b/tests/ui/parser/unicode-multibyte-chars-no-ice.rs @@ -1,7 +1,9 @@ +//! Test that multibyte Unicode characters don't crash the compiler. +//! +//! Regression test for . + //@ run-pass -// -// Test that multibyte characters don't crash the compiler pub fn main() { println!("마이너스 사인이 없으면"); } -- cgit 1.4.1-3-g733a5