aboutsummaryrefslogtreecommitdiffstats
path: root/community/rust/ensure-stage0-libs-have-unique-metadata.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/rust/ensure-stage0-libs-have-unique-metadata.patch')
-rw-r--r--community/rust/ensure-stage0-libs-have-unique-metadata.patch39
1 files changed, 39 insertions, 0 deletions
diff --git a/community/rust/ensure-stage0-libs-have-unique-metadata.patch b/community/rust/ensure-stage0-libs-have-unique-metadata.patch
new file mode 100644
index 0000000000..8141a4784e
--- /dev/null
+++ b/community/rust/ensure-stage0-libs-have-unique-metadata.patch
@@ -0,0 +1,39 @@
+From e8e5eb58c0d6890f73ea01354e18f51b1a6697f8 Mon Sep 17 00:00:00 2001
+From: Josh Stone <jistone@redhat.com>
+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.
+
+Patch-Source: https://github.com/rust-lang/rust/pull/50789
+---
+ 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 {