From 8d5b91a19f0992445a6b19f7c774cdeb54b7632a Mon Sep 17 00:00:00 2001 From: Wang Xuerui Date: Sat, 31 Dec 2016 14:29:27 +0800 Subject: [PATCH 1/2] rustbuild: check if compiler is final stage wrt the full bootstrap setting --- src/bootstrap/lib.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index 49eaed4c67a..804b56e7505 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -914,4 +914,12 @@ impl<'a> Compiler<'a> { fn is_snapshot(&self, build: &Build) -> bool { self.stage == 0 && self.host == build.config.build } + + /// Returns if this compiler is to be treated as a final stage one, whether + /// we're performing a full bootstrap or not. Don't do that by comparing + /// stages with `2`! + fn is_final_stage(&self, build: &Build) -> bool { + let final_stage = if build.config.full_bootstrap { 2 } else { 1 }; + self.stage >= final_stage + } } From e46d2d8ca2c56b500eac81ac647e9aee9862754d Mon Sep 17 00:00:00 2001 From: Wang Xuerui Date: Sat, 31 Dec 2016 14:31:08 +0800 Subject: [PATCH 2/2] rustbuild: fix save-analysis not being saved for 2-stage builds --- src/bootstrap/lib.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index 804b56e7505..bef852493e3 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -521,7 +521,7 @@ impl Build { .env(format!("CFLAGS_{}", target), self.cflags(target).join(" ")); } - if self.config.channel == "nightly" && compiler.stage == 2 { + if self.config.channel == "nightly" && compiler.is_final_stage(self) { cargo.env("RUSTC_SAVE_ANALYSIS", "api".to_string()); } @@ -915,9 +915,10 @@ impl<'a> Compiler<'a> { self.stage == 0 && self.host == build.config.build } - /// Returns if this compiler is to be treated as a final stage one, whether - /// we're performing a full bootstrap or not. Don't do that by comparing - /// stages with `2`! + /// Returns if this compiler should be treated as a final stage one in the + /// current build session. + /// This takes into account whether we're performing a full bootstrap or + /// not; don't directly compare the stage with `2`! fn is_final_stage(&self, build: &Build) -> bool { let final_stage = if build.config.full_bootstrap { 2 } else { 1 }; self.stage >= final_stage