summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_query_system/src/query
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_query_system/src/query')
-rw-r--r--compiler/rustc_query_system/src/query/plumbing.rs17
1 files changed, 15 insertions, 2 deletions
diff --git a/compiler/rustc_query_system/src/query/plumbing.rs b/compiler/rustc_query_system/src/query/plumbing.rs
index ae8414ebb..1f3403d09 100644
--- a/compiler/rustc_query_system/src/query/plumbing.rs
+++ b/compiler/rustc_query_system/src/query/plumbing.rs
@@ -19,7 +19,7 @@ use rustc_data_structures::stack::ensure_sufficient_stack;
use rustc_data_structures::sync::Lock;
#[cfg(parallel_compiler)]
use rustc_data_structures::{outline, sync};
-use rustc_errors::{DiagnosticBuilder, ErrorGuaranteed, FatalError};
+use rustc_errors::{DiagnosticBuilder, ErrorGuaranteed, FatalError, StashKey};
use rustc_span::{Span, DUMMY_SP};
use std::cell::Cell;
use std::collections::hash_map::Entry;
@@ -133,6 +133,17 @@ where
let guar = error.delay_as_bug();
query.value_from_cycle_error(*qcx.dep_context(), &cycle_error.cycle, guar)
}
+ Stash => {
+ let guar = if let Some(root) = cycle_error.cycle.first()
+ && let Some(span) = root.query.span
+ {
+ error.stash(span, StashKey::Cycle);
+ qcx.dep_context().sess().delay_span_bug(span, "delayed cycle error")
+ } else {
+ error.emit()
+ };
+ query.value_from_cycle_error(*qcx.dep_context(), &cycle_error.cycle, guar)
+ }
}
}
@@ -459,7 +470,9 @@ where
// Similarly, fingerprint the result to assert that
// it doesn't have anything not considered hashable.
- if cfg!(debug_assertions) && let Some(hash_result) = query.hash_result() {
+ if cfg!(debug_assertions)
+ && let Some(hash_result) = query.hash_result()
+ {
qcx.dep_context().with_stable_hashing_context(|mut hcx| {
hash_result(&mut hcx, &result);
});