Value recovery can take the whole CycleError
This commit is contained in:
parent
ca663b06c5
commit
755b2da841
8 changed files with 54 additions and 31 deletions
|
@ -5,7 +5,7 @@ use crate::error::HandleCycleError;
|
|||
use crate::ich::StableHashingContext;
|
||||
use crate::query::caches::QueryCache;
|
||||
use crate::query::DepNodeIndex;
|
||||
use crate::query::{QueryContext, QueryInfo, QueryState};
|
||||
use crate::query::{CycleError, QueryContext, QueryState};
|
||||
|
||||
use rustc_data_structures::fingerprint::Fingerprint;
|
||||
use rustc_span::ErrorGuaranteed;
|
||||
|
@ -57,7 +57,7 @@ pub trait QueryConfig<Qcx: QueryContext>: Copy {
|
|||
fn value_from_cycle_error(
|
||||
self,
|
||||
tcx: Qcx::DepContext,
|
||||
cycle: &[QueryInfo],
|
||||
cycle_error: &CycleError,
|
||||
guar: ErrorGuaranteed,
|
||||
) -> Self::Value;
|
||||
|
||||
|
|
|
@ -556,7 +556,7 @@ pub fn deadlock(query_map: QueryMap, registry: &rayon_core::Registry) {
|
|||
|
||||
#[inline(never)]
|
||||
#[cold]
|
||||
pub(crate) fn report_cycle<'a>(
|
||||
pub fn report_cycle<'a>(
|
||||
sess: &'a Session,
|
||||
CycleError { usage, cycle: stack }: &CycleError,
|
||||
) -> DiagnosticBuilder<'a> {
|
||||
|
|
|
@ -4,7 +4,9 @@ pub use self::plumbing::*;
|
|||
mod job;
|
||||
#[cfg(parallel_compiler)]
|
||||
pub use self::job::deadlock;
|
||||
pub use self::job::{print_query_stack, QueryInfo, QueryJob, QueryJobId, QueryJobInfo, QueryMap};
|
||||
pub use self::job::{
|
||||
print_query_stack, report_cycle, QueryInfo, QueryJob, QueryJobId, QueryJobInfo, QueryMap,
|
||||
};
|
||||
|
||||
mod caches;
|
||||
pub use self::caches::{
|
||||
|
|
|
@ -134,7 +134,7 @@ where
|
|||
match query.handle_cycle_error() {
|
||||
Error => {
|
||||
let guar = error.emit();
|
||||
query.value_from_cycle_error(*qcx.dep_context(), &cycle_error.cycle, guar)
|
||||
query.value_from_cycle_error(*qcx.dep_context(), cycle_error, guar)
|
||||
}
|
||||
Fatal => {
|
||||
error.emit();
|
||||
|
@ -143,7 +143,7 @@ where
|
|||
}
|
||||
DelayBug => {
|
||||
let guar = error.delay_as_bug();
|
||||
query.value_from_cycle_error(*qcx.dep_context(), &cycle_error.cycle, guar)
|
||||
query.value_from_cycle_error(*qcx.dep_context(), cycle_error, guar)
|
||||
}
|
||||
Stash => {
|
||||
let guar = if let Some(root) = cycle_error.cycle.first()
|
||||
|
@ -154,7 +154,7 @@ where
|
|||
} else {
|
||||
error.emit()
|
||||
};
|
||||
query.value_from_cycle_error(*qcx.dep_context(), &cycle_error.cycle, guar)
|
||||
query.value_from_cycle_error(*qcx.dep_context(), cycle_error, guar)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -211,7 +211,7 @@ where
|
|||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub(crate) struct CycleError {
|
||||
pub struct CycleError {
|
||||
/// The query and related span that uses the cycle.
|
||||
pub usage: Option<(Span, QueryStackFrame)>,
|
||||
pub cycle: Vec<QueryInfo>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue