diff options
| author | pierwill <pierwill@users.noreply.github.com> | 2021-10-31 17:05:48 -0500 |
|---|---|---|
| committer | pierwill <pierwill@users.noreply.github.com> | 2021-11-12 13:41:46 -0600 |
| commit | 1642fdfea0ba60f4e142e5d767491ab7686cd13b (patch) | |
| tree | e6af7668ee5150dcbbd05cbc4f510af1c4dac02f /compiler/rustc_incremental | |
| parent | 220ed09b26177ca4b6ab525f403d251024389a41 (diff) | |
| download | rust-1642fdfea0ba60f4e142e5d767491ab7686cd13b.tar.gz rust-1642fdfea0ba60f4e142e5d767491ab7686cd13b.zip | |
Add `-Zassert-incr-state` to assert state of incremental cache
Diffstat (limited to 'compiler/rustc_incremental')
| -rw-r--r-- | compiler/rustc_incremental/src/persist/load.rs | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/compiler/rustc_incremental/src/persist/load.rs b/compiler/rustc_incremental/src/persist/load.rs index 5f5e83774da..9c6e2aeb50a 100644 --- a/compiler/rustc_incremental/src/persist/load.rs +++ b/compiler/rustc_incremental/src/persist/load.rs @@ -6,6 +6,7 @@ use rustc_middle::dep_graph::{SerializedDepGraph, WorkProduct, WorkProductId}; use rustc_middle::ty::OnDiskCache; use rustc_serialize::opaque::Decoder; use rustc_serialize::Decodable; +use rustc_session::config::IncrementalStateAssertion; use rustc_session::Session; use std::path::Path; @@ -16,6 +17,7 @@ use super::work_product; type WorkProductMap = FxHashMap<WorkProductId, WorkProduct>; +#[derive(Debug)] pub enum LoadResult<T> { Ok { data: T }, DataOutOfDate, @@ -24,6 +26,26 @@ pub enum LoadResult<T> { impl<T: Default> LoadResult<T> { pub fn open(self, sess: &Session) -> T { + // Check for errors when using `-Zassert-incremental-state` + match (sess.opts.assert_incr_state, &self) { + (Some(IncrementalStateAssertion::NotLoaded), LoadResult::Ok { .. }) => { + sess.fatal( + "We asserted that the incremental cache should not be loaded, \ + but it was loaded.", + ); + } + ( + Some(IncrementalStateAssertion::Loaded), + LoadResult::Error { .. } | LoadResult::DataOutOfDate, + ) => { + sess.fatal( + "We asserted that an existing incremental cache directory should \ + be successfully loaded, but it was not.", + ); + } + _ => {} + }; + match self { LoadResult::Error { message } => { sess.warn(&message); @@ -33,7 +55,7 @@ impl<T: Default> LoadResult<T> { if let Err(err) = delete_all_session_dir_contents(sess) { sess.err(&format!( "Failed to delete invalidated or incompatible \ - incremental compilation session directory contents `{}`: {}.", + incremental compilation session directory contents `{}`: {}.", dep_graph_path(sess).display(), err )); |
