Rewrite lto-readonly-lib to rmake

This commit is contained in:
Oneirical 2024-06-06 15:20:42 -04:00
parent 594135ea37
commit 03a4259c8b
5 changed files with 48 additions and 49 deletions

View file

@ -112,7 +112,6 @@ run-make/lto-dylib-dep/Makefile
run-make/lto-empty/Makefile
run-make/lto-linkage-used-attr/Makefile
run-make/lto-no-link-whole-rlib/Makefile
run-make/lto-readonly-lib/Makefile
run-make/lto-smoke-c/Makefile
run-make/macos-deployment-target/Makefile
run-make/macos-fat-archive/Makefile

View file

@ -6,34 +6,22 @@
use run_make_support::rustc;
fn main() {
assert!(
String::from_utf8(
rustc()
.input("empty.rs")
.linker_flavor("ld")
.link_arg("a")
.link_args("\"b c\"")
.link_args("\"d e\"")
.link_arg("f")
.run_fail()
.stderr
)
.unwrap()
.contains("\"a\" \"b\" \"c\" \"d\" \"e\" \"f\"")
);
assert!(
String::from_utf8(
rustc()
.input("empty.rs")
.linker_flavor("ld")
.pre_link_arg("a")
.pre_link_args("\"b c\"")
.pre_link_args("\"d e\"")
.pre_link_arg("f")
.run_fail()
.stderr
)
.unwrap()
.contains("\"a\" \"b\" \"c\" \"d\" \"e\" \"f\"")
);
rustc()
.input("empty.rs")
.linker_flavor("ld")
.link_arg("a")
.link_args("\"b c\"")
.link_args("\"d e\"")
.link_arg("f")
.run_fail()
.assert_stderr_contains("\"a\" \"b\" \"c\" \"d\" \"e\" \"f\"");
rustc()
.input("empty.rs")
.linker_flavor("ld")
.pre_link_arg("a")
.pre_link_args("\"b c\"")
.pre_link_args("\"d e\"")
.pre_link_arg("f")
.run_fail()
.assert_stderr_contains("\"a\" \"b\" \"c\" \"d\" \"e\" \"f\"");
}

View file

@ -7,11 +7,11 @@
//@ ignore-cross-compile
use run_make_support::fs_wrapper;
use run_make_support::{rmake_out_path, rustc};
use run_make_support::rustc;
fn main() {
rustc().input("foo.rs");
rustc().arg("-Zls=root").input(rmake_out_path("foo"));
fs_wrapper::create_file(rmake_out_path("bar"));
rustc().arg("-Zls=root").input(rmake_out_path("bar"));
rustc().input("foo.rs").run();
rustc().arg("-Zls=root").input("foo").run();
fs_wrapper::create_file("bar");
rustc().arg("-Zls=root").input("bar").run();
}

View file

@ -1,13 +0,0 @@
# ignore-cross-compile
include ../tools.mk
all:
$(RUSTC) lib.rs
# the compiler needs to copy and modify the rlib file when performing
# LTO, so we should ensure that it can cope with the original rlib
# being read-only.
chmod 444 $(TMPDIR)/*.rlib
$(RUSTC) main.rs -C lto
$(call RUN,main)

View file

@ -0,0 +1,25 @@
// When the compiler is performing link time optimization, it will
// need to copy the original rlib file, set the copy's permissions to read/write,
// and modify that copy - even if the original
// file is read-only. This test creates a read-only rlib, and checks that
// compilation with LTO succeeds.
// See https://github.com/rust-lang/rust/pull/17619
//@ ignore-cross-compile
use run_make_support::fs_wrapper;
use run_make_support::{cwd, run, rustc};
fn main() {
rustc().input("lib.rs").run();
let entries = fs_wrapper::read_dir(cwd());
for entry in entries {
if entry.path().extension().and_then(|s| s.to_str()) == Some("rlib") {
let mut perms = fs_wrapper::metadata(entry.path()).permissions();
perms.set_readonly(true);
fs_wrapper::set_permissions(entry.path(), perms);
}
}
rustc().input("main.rs").arg("-Clto").run();
run("main");
}