-
Notifications
You must be signed in to change notification settings - Fork 13k
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 #127778 - Oneirical:artificial-intestlligence, r=<try>
Migrate `staticlib-blank-lib`, `rlib-format-packed-bundled-libs-3` and `issue-97463-abi-param-passing` `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). Please try: try-job: test-various try-job: x86-64-msvc
- Loading branch information
Showing
10 changed files
with
128 additions
and
59 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 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,87 @@ | ||
// `-Z packed_bundled_libs` is an unstable rustc flag that makes the compiler | ||
// only require a native library and no supplementary object files to compile. | ||
// #105601 made it possible to have this behaviour without an unstable flag by | ||
// passing +bundle in modifiers, and this test checks that this feature successfully | ||
// compiles and includes only the static libraries, with no object files. | ||
// See https://github.com/rust-lang/rust/pull/105601 | ||
|
||
use run_make_support::{ | ||
build_native_static_lib, is_msvc, llvm_ar, regex, rfs, rust_lib_name, rustc, static_lib_name, | ||
}; | ||
|
||
// FIXME only-linux test-various | ||
|
||
fn main() { | ||
build_native_static_lib("native_dep_1"); | ||
build_native_static_lib("native_dep_2"); | ||
build_native_static_lib("native_dep_3"); | ||
build_native_static_lib("native_dep_4"); | ||
// Test cfg with packed bundle. | ||
rustc().input("rust_dep_cfg.rs").crate_type("rlib").run(); | ||
rustc() | ||
.input("main.rs") | ||
.extern_("rust_dep", rust_lib_name("rust_dep_cfg")) | ||
.crate_type("staticlib") | ||
.cfg("should_add") | ||
.run(); | ||
// Only static libraries should appear, no object files at all. | ||
llvm_ar() | ||
.arg("t") | ||
.arg(rust_lib_name("rust_dep_cfg")) | ||
.run() | ||
.assert_stdout_contains(static_lib_name("native_dep_1")); | ||
llvm_ar() | ||
.arg("t") | ||
.arg(rust_lib_name("rust_dep_cfg")) | ||
.run() | ||
.assert_stdout_contains(static_lib_name("native_dep_2")); | ||
llvm_ar() | ||
.arg("t") | ||
.arg(static_lib_name("main")) | ||
.run() | ||
.assert_stdout_contains(object_file_name("native_dep_1")); | ||
llvm_ar() | ||
.arg("t") | ||
.arg(static_lib_name("main")) | ||
.run() | ||
.assert_stdout_not_contains(object_file_name("native_dep_2")); | ||
|
||
// Test bundle with whole archive. | ||
rustc().input("rust_dep.rs").crate_type("rlib").run(); | ||
// Only deps with `+bundle` should appear. | ||
llvm_ar().arg("t").arg(rust_lib_name("rust_dep")).run().assert_stdout_contains("native_dep_1"); | ||
llvm_ar().arg("t").arg(rust_lib_name("rust_dep")).run().assert_stdout_contains("native_dep_3"); | ||
llvm_ar() | ||
.arg("t") | ||
.arg(rust_lib_name("rust_dep")) | ||
.run() | ||
.assert_stdout_not_contains("native_dep_2"); | ||
llvm_ar() | ||
.arg("t") | ||
.arg(rust_lib_name("rust_dep")) | ||
.run() | ||
.assert_stdout_not_contains("native_dep_4"); | ||
|
||
// The compiler shouldn't use files which it doesn't know about. | ||
rfs::remove_file(static_lib_name("native_dep_1")); | ||
rfs::remove_file(static_lib_name("native_dep_3")); | ||
|
||
let out = rustc() | ||
.input("main.rs") | ||
.extern_("rust_dep", rust_lib_name("rust_dep")) | ||
.print("link-args") | ||
.run() | ||
.assert_stdout_not_contains("native_dep_3") | ||
.stdout_utf8(); | ||
|
||
let re = regex::Regex::new( | ||
"--whole-archive.*native_dep_1.*--whole-archive.*lnative_dep_2.*no-whole-archive.*lnative_dep_4" | ||
).unwrap(); | ||
|
||
assert!(re.is_match(&out)); | ||
} | ||
|
||
//FIXME(Oneirical): potential helper fn if this works on msvc too | ||
fn object_file_name(name: &str) -> String { | ||
if is_msvc() { format!("{name}.obj") } else { format!("{name}.o") } | ||
} |
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,13 @@ | ||
// In this test, the static library foo is made blank, which used to cause | ||
// a compilation error. As the compiler now returns Ok upon encountering a blank | ||
// staticlib as of #12379, this test checks that compilation is successful despite | ||
// the blank staticlib. | ||
// See https://github.com/rust-lang/rust/pull/12379 | ||
|
||
use run_make_support::{llvm_ar, rustc, static_lib_name}; | ||
|
||
fn main() { | ||
llvm_ar().obj_to_ar().output_input(static_lib_name("foo"), "foo.rs").run(); | ||
llvm_ar().arg("d").output_input(static_lib_name("foo"), "foo.rs").run(); | ||
rustc().input("foo.rs").run(); | ||
} |
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,26 @@ | ||
// This test was created in response to an obscure miscompilation bug, only | ||
// visible with the -O3 flag passed to the cc compiler when trying to obtain | ||
// a native static library for the sake of foreign function interface. This | ||
// flag could cause certain integer types to fail to be zero-extended, resulting | ||
// in type casting errors. After the fix in #97800, this test attempts integer casting | ||
// while simultaneously interfacing with a C library and using the -O3 flag. | ||
// See https://github.com/rust-lang/rust/issues/97463 | ||
|
||
// FIXME(Oneirical): ignore-msvc | ||
|
||
//@ ignore-cross-compile | ||
// Reason: The compiled binary is executed. | ||
|
||
use run_make_support::{cc, is_msvc, llvm_ar, run, rustc, static_lib_name}; | ||
|
||
fn main() { | ||
// The issue exercised by this test specifically needs needs `-O` | ||
// flags (like `-O3`) to reproduce. Thus, we call `cc()` instead of | ||
// the nicer `build_native_static_lib`. | ||
let obj_file = if is_msvc() { "bad" } else { "bad.o" }; | ||
cc().arg("-c").arg("-O3").out_exe(&obj_file).input("bad.c").run(); | ||
let obj_file = if is_msvc() { "bad.obj" } else { "bad.o" }; | ||
llvm_ar().obj_to_ar().output_input(static_lib_name("bad"), &obj_file).run(); | ||
rustc().input("param_passing.rs").arg("-lbad").opt_level("3").run(); | ||
run("param_passing"); | ||
} |