Fingerprint even when incr comp is disabled in debug mode
This commit is contained in:
parent
f361413cbf
commit
bbf33836b9
2 changed files with 19 additions and 1 deletions
|
@ -3,6 +3,7 @@
|
||||||
#![feature(hash_raw_entry)]
|
#![feature(hash_raw_entry)]
|
||||||
#![feature(min_specialization)]
|
#![feature(min_specialization)]
|
||||||
#![feature(extern_types)]
|
#![feature(extern_types)]
|
||||||
|
#![feature(let_chains)]
|
||||||
#![allow(rustc::potential_query_instability)]
|
#![allow(rustc::potential_query_instability)]
|
||||||
#![deny(rustc::untranslatable_diagnostic)]
|
#![deny(rustc::untranslatable_diagnostic)]
|
||||||
#![deny(rustc::diagnostic_outside_of_impl)]
|
#![deny(rustc::diagnostic_outside_of_impl)]
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//! generate the actual methods on tcx which find and execute the provider,
|
//! generate the actual methods on tcx which find and execute the provider,
|
||||||
//! manage the caches, and so forth.
|
//! manage the caches, and so forth.
|
||||||
|
|
||||||
use crate::dep_graph::{DepContext, DepKind, DepNode, DepNodeIndex};
|
use crate::dep_graph::{DepContext, DepKind, DepNode, DepNodeIndex, DepNodeParams};
|
||||||
use crate::ich::StableHashingContext;
|
use crate::ich::StableHashingContext;
|
||||||
use crate::query::caches::QueryCache;
|
use crate::query::caches::QueryCache;
|
||||||
use crate::query::job::{report_cycle, QueryInfo, QueryJob, QueryJobId, QueryJobInfo};
|
use crate::query::job::{report_cycle, QueryInfo, QueryJob, QueryJobId, QueryJobInfo};
|
||||||
|
@ -428,12 +428,29 @@ where
|
||||||
|
|
||||||
// Fast path for when incr. comp. is off.
|
// Fast path for when incr. comp. is off.
|
||||||
if !dep_graph.is_fully_enabled() {
|
if !dep_graph.is_fully_enabled() {
|
||||||
|
// Fingerprint the key, just to assert that it doesn't
|
||||||
|
// have anything we don't consider hashable
|
||||||
|
if cfg!(debug_assertions) {
|
||||||
|
let _ = key.to_fingerprint(*qcx.dep_context());
|
||||||
|
}
|
||||||
|
|
||||||
let prof_timer = qcx.dep_context().profiler().query_provider();
|
let prof_timer = qcx.dep_context().profiler().query_provider();
|
||||||
let result = qcx.start_query(job_id, Q::DEPTH_LIMIT, None, || {
|
let result = qcx.start_query(job_id, Q::DEPTH_LIMIT, None, || {
|
||||||
Q::compute(qcx, &key)(*qcx.dep_context(), key)
|
Q::compute(qcx, &key)(*qcx.dep_context(), key)
|
||||||
});
|
});
|
||||||
let dep_node_index = dep_graph.next_virtual_depnode_index();
|
let dep_node_index = dep_graph.next_virtual_depnode_index();
|
||||||
prof_timer.finish_with_query_invocation_id(dep_node_index.into());
|
prof_timer.finish_with_query_invocation_id(dep_node_index.into());
|
||||||
|
|
||||||
|
// Similarly, fingerprint the result to assert that
|
||||||
|
// it doesn't have anything not considered hashable.
|
||||||
|
if cfg!(debug_assertions)
|
||||||
|
&& let Some(hash_result) = Q::HASH_RESULT
|
||||||
|
{
|
||||||
|
qcx.dep_context().with_stable_hashing_context(|mut hcx| {
|
||||||
|
hash_result(&mut hcx, &result);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return (result, dep_node_index);
|
return (result, dep_node_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue