Ensure libraries built in stage0 have unique metadata
authorJosh Stone <jistone@redhat.com>
Wed, 16 May 2018 00:48:02 +0000 (17:48 -0700)
committerXimin Luo <infinity0@debian.org>
Wed, 25 Jul 2018 04:35:56 +0000 (05:35 +0100)
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.

Gbp-Pq: Name u-0001-Ensure-libraries-built-in-stage0-have-unique-metadat.patch

src/bootstrap/builder.rs

index 9c35cb7f506f970a8370bf427a3bf1fe513e02ab..44d7b94fc0bf4a93e2f3a749f583530e26f2c733 100644 (file)
@@ -567,7 +567,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 {