From 5930551f6a471164d61d0b67cd412b32461924e3 Mon Sep 17 00:00:00 2001 From: Quentin Boyer Date: Wed, 16 Oct 2019 13:13:13 +0200 Subject: [PATCH] Check if there are any delayed_span_bugs and abort incremental compilation in this case --- src/librustc/session/mod.rs | 3 +++ src/librustc_errors/lib.rs | 6 ++++++ src/librustc_incremental/persist/fs.rs | 2 +- src/librustc_incremental/persist/save.rs | 8 ++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index fa2902e4f0ede..d90ce5c7f3a95 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -310,6 +310,9 @@ impl Session { pub fn has_errors(&self) -> bool { self.diagnostic().has_errors() } + pub fn has_errors_or_delayed_span_bugs(&self) -> bool { + self.diagnostic().has_errors_or_delayed_span_bugs() + } pub fn abort_if_errors(&self) { self.diagnostic().abort_if_errors(); } diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index 63df052a22504..9743cf0d805a3 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -704,6 +704,9 @@ impl Handler { pub fn has_errors(&self) -> bool { self.inner.borrow().has_errors() } + pub fn has_errors_or_delayed_span_bugs(&self) -> bool { + self.inner.borrow().has_errors_or_delayed_span_bugs() + } pub fn print_error_count(&self, registry: &Registry) { self.inner.borrow_mut().print_error_count(registry) @@ -862,6 +865,9 @@ impl HandlerInner { fn has_errors(&self) -> bool { self.err_count() > 0 } + fn has_errors_or_delayed_span_bugs(&self) -> bool { + self.has_errors() || !self.delayed_span_bugs.is_empty() + } fn abort_if_errors_and_should_abort(&mut self) { self.emit_stashed_diagnostics(); diff --git a/src/librustc_incremental/persist/fs.rs b/src/librustc_incremental/persist/fs.rs index 511175de5d8d1..cbebdeb602cc0 100644 --- a/src/librustc_incremental/persist/fs.rs +++ b/src/librustc_incremental/persist/fs.rs @@ -307,7 +307,7 @@ pub fn finalize_session_directory(sess: &Session, svh: Svh) { let incr_comp_session_dir: PathBuf = sess.incr_comp_session_dir().clone(); - if sess.has_errors() { + if sess.has_errors_or_delayed_span_bugs() { // If there have been any errors during compilation, we don't want to // publish this session directory. Rather, we'll just delete it. diff --git a/src/librustc_incremental/persist/save.rs b/src/librustc_incremental/persist/save.rs index f5935c9969baa..ecc66e60175f0 100644 --- a/src/librustc_incremental/persist/save.rs +++ b/src/librustc_incremental/persist/save.rs @@ -22,6 +22,10 @@ pub fn save_dep_graph(tcx: TyCtxt<'_>) { if sess.opts.incremental.is_none() { return; } + // This is going to be deleted in finalize_session_directory, so let's not create it + if sess.has_errors_or_delayed_span_bugs() { + return; + } let query_cache_path = query_cache_path(sess); let dep_graph_path = dep_graph_path(sess); @@ -60,6 +64,10 @@ pub fn save_work_product_index(sess: &Session, if sess.opts.incremental.is_none() { return; } + // This is going to be deleted in finalize_session_directory, so let's not create it + if sess.has_errors_or_delayed_span_bugs() { + return; + } debug!("save_work_product_index()"); dep_graph.assert_ignored();