Rollup merge of #127338 - Oneirical:ready-your-arbatests, r=jieyouxu

Migrate `extra-filename-with-temp-outputs` and `issue-85019-moved-src-dir` `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: armhf-gnu
// try-job: test-various // already tried
try-job: x86_64-msvc
try-job: aarch64-apple
This commit is contained in:
Jubilee 2024-07-12 13:47:07 -07:00 committed by GitHub
commit 6cdef05a71
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 64 additions and 37 deletions

View File

@ -303,6 +303,11 @@ pub fn filename_not_in_denylist<P: AsRef<Path>, V: AsRef<[String]>>(path: P, exp
.is_some_and(|name| !expected.contains(&name.to_str().unwrap().to_owned()))
}
/// Returns true if the filename at `path` ends with `suffix`.
pub fn has_suffix<P: AsRef<Path>>(path: P, suffix: &str) -> bool {
path.as_ref().file_name().is_some_and(|name| name.to_str().unwrap().ends_with(suffix))
}
/// Gathers all files in the current working directory that have the extension `ext`, and counts
/// the number of lines within that contain a match with the regex pattern `re`.
pub fn count_regex_matches_in_files_with_extension(re: &regex::Regex, ext: &str) -> usize {

View File

@ -37,7 +37,6 @@ run-make/extern-fn-with-packed-struct/Makefile
run-make/extern-fn-with-union/Makefile
run-make/extern-multiple-copies/Makefile
run-make/extern-multiple-copies2/Makefile
run-make/extra-filename-with-temp-outputs/Makefile
run-make/fmt-write-bloat/Makefile
run-make/foreign-double-unwind/Makefile
run-make/foreign-exceptions/Makefile
@ -60,7 +59,6 @@ run-make/issue-47551/Makefile
run-make/issue-69368/Makefile
run-make/issue-83045/Makefile
run-make/issue-84395-lto-embed-bitcode/Makefile
run-make/issue-85019-moved-src-dir/Makefile
run-make/issue-85401-static-mir/Makefile
run-make/issue-88756-default-output/Makefile
run-make/issue-97463-abi-param-passing/Makefile

View File

@ -1,7 +0,0 @@
# ignore-cross-compile
include ../tools.mk
all:
$(RUSTC) -C extra-filename=bar foo.rs -C save-temps
rm $(TMPDIR)/foobar.foo*0.rcgu.o
rm $(TMPDIR)/$(call BIN,foobar)

View File

@ -0,0 +1,21 @@
// In order to prevent temporary files from overwriting each other in parallel
// compilation, rustc was changed to mix an extra filename with temporary
// outputs. However, as this is a similar behavior with the codegen flag
// -C extra-filename, this test checks that the manually passed flag
// is not overwritten by this feature, and that the output files
// are named as expected.
// See https://github.com/rust-lang/rust/pull/15686
use run_make_support::{
bin_name, cwd, fs_wrapper, has_prefix, has_suffix, rustc, shallow_find_files,
};
fn main() {
rustc().extra_filename("bar").input("foo.rs").arg("-Csave-temps").run();
let object_files = shallow_find_files(cwd(), |path| {
has_prefix(path, "foobar.foo") && has_suffix(path, "0.rcgu.o")
});
let object_file = object_files.get(0).unwrap();
fs_wrapper::remove_file(object_file);
fs_wrapper::remove_file(bin_name("foobar"));
}

View File

@ -1,28 +0,0 @@
include ../tools.mk
INCR=$(TMPDIR)/incr
FIRST_SRC=$(TMPDIR)/first_src
SECOND_SRC=$(TMPDIR)/second_src
# ignore-none no-std is not supported
# ignore-nvptx64-nvidia-cuda FIXME: can't find crate for 'std'
# Tests that we don't get an ICE when the working directory
# (but not the build directory!) changes between compilation
# sessions
all:
mkdir $(INCR)
# Build from 'FIRST_SRC'
mkdir $(FIRST_SRC)
cp my_lib.rs $(FIRST_SRC)/my_lib.rs
cp main.rs $(FIRST_SRC)/main.rs
cd $(FIRST_SRC) && \
$(RUSTC) -C incremental=$(INCR) --crate-type lib my_lib.rs --target $(TARGET) && \
$(RUSTC) -C incremental=$(INCR) --extern my_lib=$(TMPDIR)/libmy_lib.rlib main.rs --target $(TARGET)
# Build from 'SECOND_SRC', keeping the output directory and incremental directory
# the same
mv $(FIRST_SRC) $(SECOND_SRC)
cd $(SECOND_SRC) && \
$(RUSTC) -C incremental=$(INCR) --crate-type lib my_lib.rs --target $(TARGET) && \
$(RUSTC) -C incremental=$(INCR) --extern my_lib=$(TMPDIR)/libmy_lib.rlib main.rs --target $(TARGET)

View File

@ -0,0 +1,38 @@
// A SourceFile created during compilation may have a relative
// path (e.g. if rustc itself is invoked with a relative path).
// When we write out crate metadata, we convert all relative paths
// to absolute paths using the current working directory.
// However, the working directory was previously not included in the crate hash.
// This meant that the crate metadata could change while the crate
// hash remained the same. Among other problems, this could cause a
// fingerprint mismatch ICE, since incremental compilation uses
// the crate metadata hash to determine if a foreign query is green.
// This test checks that we don't get an ICE when the working directory
// (but not the build directory!) changes between compilation
// sessions.
// See https://github.com/rust-lang/rust/issues/85019
//@ ignore-none
// Reason: no-std is not supported
//@ ignore-nvptx64-nvidia-cuda
// FIXME: can't find crate for 'std'
use run_make_support::{fs_wrapper, rust_lib_name, rustc};
fn main() {
fs_wrapper::create_dir("incr");
fs_wrapper::create_dir("first_src");
fs_wrapper::create_dir("output");
fs_wrapper::rename("my_lib.rs", "first_src/my_lib.rs");
fs_wrapper::rename("main.rs", "first_src/main.rs");
// Build from "first_src"
std::env::set_current_dir("first_src").unwrap();
rustc().input("my_lib.rs").incremental("incr").crate_type("lib").run();
rustc().input("main.rs").incremental("incr").extern_("my_lib", rust_lib_name("my_lib")).run();
std::env::set_current_dir("..").unwrap();
fs_wrapper::rename("first_src", "second_src");
std::env::set_current_dir("second_src").unwrap();
// Build from "second_src" - the output and incremental directory remain identical
rustc().input("my_lib.rs").incremental("incr").crate_type("lib").run();
rustc().input("main.rs").incremental("incr").extern_("my_lib", rust_lib_name("my_lib")).run();
}