-
Notifications
You must be signed in to change notification settings - Fork 12.7k
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 #128196 - Oneirical:poltergeist-manitestation, r=<try>
Migrate `cross-lang-lto-upstream-rlibs`, `long-linker-command-lines` and `long-linker-command-lines-cmd-exe` `run-make` tests to 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). The `long-linker` tests are certainly doing something... interesting - they summon `rustc` calls with obscene quantities of arguments and check that this is appropriately handled. I removed the `RUSTC_ORIGINAL` magic - it's equivalent to `RUSTC` in `tools.mk`, so what is the purpose? Making it so the massive pile of flags doesn't modify rustc itself and start leaking into other tests? Tell me what you think. Please try: try-job: x86_64-msvc
- Loading branch information
Showing
9 changed files
with
110 additions
and
87 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 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,61 @@ | ||
// When using the flag -C linker-plugin-lto, static libraries could lose their upstream object | ||
// files during compilation. This bug was fixed in #53031, and this test compiles a staticlib | ||
// dependent on upstream, checking that the upstream object file still exists after no LTO and | ||
// thin LTO. | ||
// See https://github.com/rust-lang/rust/pull/53031 | ||
|
||
// ignore windows due to libLLVM being present in PATH and the PATH and library path being the same | ||
// (so fixing it is harder). See #57765 for context | ||
//FIXME(Oneirical): ignore-windows | ||
|
||
use run_make_support::{ | ||
cwd, has_extension, has_prefix, has_suffix, llvm_ar, rfs, rustc, shallow_find_files, | ||
static_lib_name, | ||
}; | ||
|
||
fn main() { | ||
// The test starts with no LTO enabled. | ||
rustc().input("upstream.rs").arg("-Clinker-plugin-lto").codegen_units(1).run(); | ||
rustc() | ||
.input("staticlib.rs") | ||
.arg("-Clinker-plugin-lto") | ||
.codegen_units(1) | ||
.output(static_lib_name("staticlib")) | ||
.run(); | ||
llvm_ar().arg("x").arg(static_lib_name("staticlib")).run(); | ||
// Ensure the upstream object file was included. | ||
assert_eq!( | ||
shallow_find_files(cwd(), |path| { | ||
has_prefix(path, "upstream.") && has_suffix(path, ".rcgu.o") | ||
}) | ||
.len(), | ||
1 | ||
); | ||
// Remove all output files that are not source Rust code for cleanup. | ||
for file in shallow_find_files(cwd(), |path| !has_extension(path, "rs")) { | ||
rfs::remove_file(file) | ||
} | ||
|
||
// Check it again, with Thin LTO. | ||
rustc() | ||
.input("upstream.rs") | ||
.arg("-Clinker-plugin-lto") | ||
.codegen_units(1) | ||
.arg("-Clto=thin") | ||
.run(); | ||
rustc() | ||
.input("staticlib.rs") | ||
.arg("-Clinker-plugin-lto") | ||
.codegen_units(1) | ||
.arg("-Clto=thin") | ||
.output(static_lib_name("staticlib")) | ||
.run(); | ||
llvm_ar().arg("x").arg(static_lib_name("staticlib")).run(); | ||
assert_eq!( | ||
shallow_find_files(cwd(), |path| { | ||
has_prefix(path, "upstream.") && has_suffix(path, ".rcgu.o") | ||
}) | ||
.len(), | ||
1 | ||
); | ||
} |
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
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 @@ | ||
// Like the `long-linker-command-lines` test this test attempts to blow | ||
// a command line limit for running the linker. Unlike that test, however, | ||
// this test is testing `cmd.exe` specifically rather than the OS. | ||
// | ||
// Unfortunately `cmd.exe` has a 8192 limit which is relatively small | ||
// in the grand scheme of things and anyone sripting rustc's linker | ||
// is probably using a `*.bat` script and is likely to hit this limit. | ||
// | ||
// This test uses a `foo.bat` script as the linker which just simply | ||
// delegates back to this program. The compiler should use a lower | ||
// limit for arguments before passing everything via `@`, which | ||
// means that everything should still succeed here. | ||
// See https://github.com/rust-lang/rust/pull/47507 | ||
|
||
//@ ignore-cross-compile | ||
// Reason: the compiled binary is executed | ||
//@ only-windows | ||
// Reason: this test is specific to Windows executables | ||
|
||
use run_make_support::{run, rustc}; | ||
|
||
fn main() { | ||
rustc().input("foo.rs").arg("-g").run(); | ||
run("foo"); | ||
} |
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
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,19 @@ | ||
// This is a test which attempts to blow out the system limit with how many | ||
// arguments can be passed to a process. This'll successively call rustc with | ||
// larger and larger argument lists in an attempt to find one that's way too | ||
// big for the system at hand. This file itself is then used as a "linker" to | ||
// detect when the process creation succeeds. | ||
// | ||
// Eventually we should see an argument that looks like `@` as we switch from | ||
// passing literal arguments to passing everything in the file. | ||
// See https://github.com/rust-lang/rust/issues/41190 | ||
|
||
//@ ignore-cross-compile | ||
// Reason: the compiled binary is executed | ||
|
||
use run_make_support::{run, rustc}; | ||
|
||
fn main() { | ||
rustc().input("foo.rs").arg("-g").opt().run(); | ||
run("foo"); | ||
} |