Skip to content

Commit

Permalink
rewrite and rename issue-97463-abi-param-passing to rmake
Browse files Browse the repository at this point in the history
  • Loading branch information
Oneirical committed Jul 22, 2024
1 parent f1747f4 commit 5fc67f9
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 25 deletions.
2 changes: 2 additions & 0 deletions src/tools/run-make-support/src/external_deps/llvm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,8 @@ impl LlvmAr {
Self { cmd }
}

/// Automatically pass the commonly used arguments `rcus`, used for combining one or more
/// input object files into one output static library file.
pub fn obj_to_ar(&mut self) -> &mut Self {
self.cmd.arg("rcus");
self
Expand Down
1 change: 0 additions & 1 deletion src/tools/tidy/src/allowed_run_make_makefiles.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ run-make/issue-47551/Makefile
run-make/issue-69368/Makefile
run-make/issue-84395-lto-embed-bitcode/Makefile
run-make/issue-88756-default-output/Makefile
run-make/issue-97463-abi-param-passing/Makefile
run-make/jobserver-error/Makefile
run-make/libs-through-symlinks/Makefile
run-make/libtest-json/Makefile
Expand Down
15 changes: 0 additions & 15 deletions tests/run-make/issue-97463-abi-param-passing/Makefile

This file was deleted.

23 changes: 14 additions & 9 deletions tests/run-make/rlib-format-packed-bundled-libs-3/rmake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,16 @@
// See https://github.com/rust-lang/rust/pull/105601

use run_make_support::{
build_native_static_lib, fs_wrapper, is_msvc, llvm_ar, regex, rust_lib_name, rustc,
static_lib_name,
build_native_static_lib, is_msvc, llvm_ar, regex, rfs, rust_lib_name, rustc, static_lib_name,
};

// FIXME only-linux test-various
//@ ignore-cross-compile
// Reason: Invalid library format (not ELF) causes compilation failure
// in the final `rustc` call.

//@ only-linux
// Reason: differences in the native lib compilation process causes differences
// in the --print link-args output

fn main() {
build_native_static_lib("native_dep_1");
Expand Down Expand Up @@ -40,12 +45,12 @@ fn main() {
.arg("t")
.arg(static_lib_name("main"))
.run()
.assert_stdout_contains(object_file_name("native_dep_1"));
.assert_stdout_contains("native_dep_1.o");
llvm_ar()
.arg("t")
.arg(static_lib_name("main"))
.run()
.assert_stdout_not_contains(object_file_name("native_dep_2"));
.assert_stdout_not_contains("native_dep_2.o");

// Test bundle with whole archive.
rustc().input("rust_dep.rs").crate_type("rlib").run();
Expand All @@ -64,8 +69,8 @@ fn main() {
.assert_stdout_not_contains("native_dep_4");

// The compiler shouldn't use files which it doesn't know about.
fs_wrapper::remove_file(static_lib_name("native_dep_1"));
fs_wrapper::remove_file(static_lib_name("native_dep_3"));
rfs::remove_file(static_lib_name("native_dep_1"));
rfs::remove_file(static_lib_name("native_dep_3"));

let out = rustc()
.input("main.rs")
Expand All @@ -83,6 +88,6 @@ fn main() {
}

//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") }
fn name: &str) -> String {
if is_msvc() { format!(.o"name}.obj") } else { format!("{name}.o") }
}
25 changes: 25 additions & 0 deletions tests/run-make/zero-extend-abi-param-passing/rmake.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// 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

//@ ignore-msvc
// Reason: the rustc compilation fails due to an unresolved external symbol

//@ 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`.
cc().arg("-c").arg("-O3").out_exe("bar").input("bad.c").run();
llvm_ar().obj_to_ar().output_input(static_lib_name("bad"), "bad.o").run();
rustc().input("param_passing.rs").arg("-lbad").opt_level("3").run();
run("param_passing");
}

0 comments on commit 5fc67f9

Please sign in to comment.