2024-07-04 16:04:20 -05:00
|
|
|
// 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'
|
|
|
|
|
2024-07-17 08:31:38 -05:00
|
|
|
use run_make_support::{rfs, rust_lib_name, rustc};
|
2024-07-04 16:04:20 -05:00
|
|
|
|
|
|
|
fn main() {
|
2024-07-17 07:42:06 -05:00
|
|
|
rfs::create_dir("incr");
|
|
|
|
rfs::create_dir("first_src");
|
|
|
|
rfs::create_dir("output");
|
|
|
|
rfs::rename("my_lib.rs", "first_src/my_lib.rs");
|
|
|
|
rfs::rename("main.rs", "first_src/main.rs");
|
2024-07-04 16:04:20 -05:00
|
|
|
// 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();
|
2024-07-17 07:42:06 -05:00
|
|
|
rfs::rename("first_src", "second_src");
|
2024-07-04 16:04:20 -05:00
|
|
|
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();
|
|
|
|
}
|