From e8e5eb58c0d6890f73ea01354e18f51b1a6697f8 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Tue, 15 May 2018 17:48:02 -0700 Subject: [PATCH] Ensure libraries built in stage0 have unique metadata Issue #50786 shows a case with local rebuild where the libraries built by stage0 had the same suffix as stage0's own, and were accidentally loaded by that stage0 rustc when compiling `librustc_trans`. Now we set `__CARGO_DEFAULT_LIB_METADATA` to "bootstrap" during stage0, rather than the release channel like usual, so the library suffix will always be completely distinct from the stage0 compiler. --- src/bootstrap/builder.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index 17f19222e6ea..e5824010ef2c 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -592,7 +592,15 @@ impl<'a> Builder<'a> { // FIXME: Temporary fix for https://github.com/rust-lang/cargo/issues/3005 // Force cargo to output binaries with disambiguating hashes in the name - cargo.env("__CARGO_DEFAULT_LIB_METADATA", &self.config.channel); + let metadata = if compiler.stage == 0 { + // Treat stage0 like special channel, whether it's a normal prior- + // release rustc or a local rebuild with the same version, so we + // never mix these libraries by accident. + "bootstrap" + } else { + &self.config.channel + }; + cargo.env("__CARGO_DEFAULT_LIB_METADATA", &metadata); let stage; if compiler.stage == 0 && self.local_rebuild { -- 2.17.0