Skip to content

Commit

Permalink
rewrite cross-lang-lto-upstream-rlibs to rmake
Browse files Browse the repository at this point in the history
  • Loading branch information
Oneirical committed Aug 6, 2024
1 parent 60d1465 commit 342b807
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 33 deletions.
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
@@ -1,6 +1,5 @@
run-make/branch-protection-check-IBT/Makefile
run-make/cat-and-grep-sanity-check/Makefile
run-make/cross-lang-lto-upstream-rlibs/Makefile
run-make/dep-info-doesnt-run-much/Makefile
run-make/dep-info-spaces/Makefile
run-make/dep-info/Makefile
Expand Down
32 changes: 0 additions & 32 deletions tests/run-make/cross-lang-lto-upstream-rlibs/Makefile

This file was deleted.

61 changes: 61 additions & 0 deletions tests/run-make/cross-lang-lto-upstream-rlibs/rmake.rs
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
);
}

0 comments on commit 342b807

Please sign in to comment.