-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #127044 - Oneirical:fantestic-journey, r=Kobzol,jieyouxu
Migrate `dylib-chain`, `rlib-chain`, `issue-47384`, `msvc-opt-minsize` and `test-harness` `run-make` tests to ui/rmake Part of #121876 and the associated [Google Summer of Code project](https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html). try-job: x86_64-msvc try-job: aarch64-apple
- Loading branch information
Showing
16 changed files
with
134 additions
and
76 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// In this test, m4 depends on m3, which depends on m2, which depends on m1. | ||
// Even though dependencies are chained like this and there is no direct mention | ||
// of m1 or m2 in m4.rs, compilation and execution should still succeed. Unlike the | ||
// rlib-chain test, dynamic libraries contain upstream dependencies, and breaking | ||
// the chain by removing the dylibs causes execution to fail. | ||
// See https://github.com/rust-lang/rust/issues/10434 | ||
|
||
//@ ignore-cross-compile | ||
// Reason: the compiled binary is executed | ||
|
||
use run_make_support::{dynamic_lib_name, fs_wrapper, run, run_fail, rustc}; | ||
|
||
fn main() { | ||
rustc().input("m1.rs").arg("-Cprefer-dynamic").run(); | ||
rustc().input("m2.rs").arg("-Cprefer-dynamic").run(); | ||
rustc().input("m3.rs").arg("-Cprefer-dynamic").run(); | ||
rustc().input("m4.rs").run(); | ||
run("m4"); | ||
fs_wrapper::remove_file(dynamic_lib_name("m1")); | ||
fs_wrapper::remove_file(dynamic_lib_name("m2")); | ||
fs_wrapper::remove_file(dynamic_lib_name("m3")); | ||
run_fail("m4"); | ||
} |
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
// Linkers treat archives differently from object files: all object files participate in linking, | ||
// while archives will only participate in linking if they can satisfy at least one undefined | ||
// reference (version scripts doesn't count). This causes `#[no_mangle]` or `#[used]` items to | ||
// be ignored by the linker, and since they never participate in the linking, using `KEEP` in the | ||
// linker scripts can't keep them either. This causes #47384. After the fix in #95604, this test | ||
// checks that these symbols and sections successfully appear in the output dynamic library. | ||
// See https://github.com/rust-lang/rust/pull/95604 | ||
// See https://github.com/rust-lang/rust/issues/47384 | ||
|
||
//@ only-linux | ||
// Reason: differences in object file formats on OSX and Windows | ||
// causes errors in the llvm_objdump step | ||
|
||
use run_make_support::{dynamic_lib_name, llvm_objdump, llvm_readobj, rustc}; | ||
|
||
fn main() { | ||
rustc().crate_type("lib").input("lib.rs").run(); | ||
rustc().crate_type("cdylib").link_args("-Tlinker.ld").input("main.rs").run(); | ||
// Ensure `#[used]` and `KEEP`-ed section is there | ||
llvm_objdump() | ||
.arg("--full-contents") | ||
.arg("--section=.static") | ||
.input(dynamic_lib_name("main")) | ||
.run(); | ||
// Ensure `#[no_mangle]` symbol is there | ||
llvm_readobj() | ||
.arg("--symbols") | ||
.input(dynamic_lib_name("main")) | ||
.run() | ||
.assert_stdout_contains("bar"); | ||
} |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// In this test, m4 depends on m3, which depends on m2, which depends on m1. | ||
// Even though dependencies are chained like this and there is no direct mention | ||
// of m1 or m2 in m4.rs, compilation and execution should still succeed. Unlike | ||
// the dylib-chain test, rlibs do not contain upstream dependencies, and removing | ||
// the libraries still allows m4 to successfully execute. | ||
// See https://github.com/rust-lang/rust/issues/10434 | ||
|
||
//@ ignore-cross-compile | ||
// Reason: the compiled binary is executed | ||
|
||
use run_make_support::{fs_wrapper, run, rust_lib_name, rustc}; | ||
|
||
fn main() { | ||
rustc().input("m1.rs").run(); | ||
rustc().input("m2.rs").run(); | ||
rustc().input("m3.rs").run(); | ||
rustc().input("m4.rs").run(); | ||
run("m4"); | ||
fs_wrapper::remove_file(rust_lib_name("m1")); | ||
fs_wrapper::remove_file(rust_lib_name("m2")); | ||
fs_wrapper::remove_file(rust_lib_name("m3")); | ||
run("m4"); | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// The way test suites run can be modified using configuration flags, | ||
// ignoring certain tests while running others. This test contains two | ||
// functions, one which must run and the other which must not. The standard | ||
// output is checked to verify that the ignore configuration is doing its job, | ||
// and that output is successfully minimized with the --quiet flag. | ||
// See https://github.com/rust-lang/rust/commit/f7ebe23ae185991b0fee05b32fbb3e29b89a41bf | ||
|
||
//@ ignore-cross-compile | ||
// Reason: the compiled binary is executed | ||
|
||
use run_make_support::{run, run_with_args, rustc}; | ||
|
||
fn main() { | ||
rustc().arg("--test").input("test-ignore-cfg.rs").cfg("ignorecfg").run(); | ||
// check that #[cfg_attr(..., ignore)] does the right thing. | ||
run("test-ignore-cfg") | ||
.assert_stdout_contains("shouldnotignore ... ok") | ||
.assert_stdout_contains("shouldignore ... ignored"); | ||
assert_eq!( | ||
// One of the lines is exactly "i." | ||
run_with_args("test-ignore-cfg", &["--quiet"]).stdout_utf8().lines().find(|&x| x == "i."), | ||
Some("i.") | ||
); | ||
run_with_args("test-ignore-cfg", &["--quiet"]).assert_stdout_not_contains("should"); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
// 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 | ||
|
||
//@ ignore-cross-compile | ||
// Reason: the compiled binary is executed | ||
//@ only-windows | ||
// Reason: the observed bug only occurs on Windows | ||
//@ run-pass | ||
//@ compile-flags: -C opt-level=z | ||
|
||
#![feature(test)] | ||
extern crate test; | ||
|
||
fn foo(x: i32, y: i32) -> i64 { | ||
(x + y) as 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 | ||
let y: fn(i32, i32) -> i64 = test::black_box(foo); | ||
test::black_box(y(1, 2)); | ||
} | ||
|
||
fn main() { | ||
bar(); | ||
} |