Avoid some trivial wrapper closures in DepKindVTable

This commit is contained in:
Zalathar
2026-02-26 17:56:46 +11:00
parent c0e7a43530
commit 4284edc3b4
2 changed files with 12 additions and 13 deletions
@@ -129,12 +129,8 @@ pub(crate) fn make_dep_kind_vtable_for_query<'tcx, Q>(
is_anon,
is_eval_always,
key_fingerprint_style,
force_from_dep_node_fn: Some(|tcx, dep_node, _| {
force_from_dep_node_inner(Q::query_vtable(tcx), tcx, dep_node)
}),
promote_from_disk_fn: Some(|tcx, dep_node| {
promote_from_disk_inner(Q::query_vtable(tcx), tcx, dep_node)
}),
force_from_dep_node_fn: Some(force_from_dep_node_inner::<Q>),
promote_from_disk_fn: Some(promote_from_disk_inner::<Q>),
}
}
+10 -7
View File
@@ -29,10 +29,10 @@
use rustc_serialize::{Decodable, Encodable};
use rustc_span::def_id::LOCAL_CRATE;
use crate::collect_active_jobs_from_all_queries;
use crate::error::{QueryOverflow, QueryOverflowNote};
use crate::execution::{all_inactive, force_query};
use crate::job::find_dep_kind_root;
use crate::{GetQueryVTable, collect_active_jobs_from_all_queries};
fn depth_limit_error<'tcx>(tcx: TyCtxt<'tcx>, job: QueryJobId) {
let job_map =
@@ -333,14 +333,14 @@ pub(crate) fn query_key_hash_verify<'tcx, C: QueryCache>(
}
/// Implementation of [`DepKindVTable::promote_from_disk_fn`] for queries.
pub(crate) fn promote_from_disk_inner<'tcx, C: QueryCache>(
query: &'tcx QueryVTable<'tcx, C>,
pub(crate) fn promote_from_disk_inner<'tcx, Q: GetQueryVTable<'tcx>>(
tcx: TyCtxt<'tcx>,
dep_node: DepNode,
) {
let query = Q::query_vtable(tcx);
debug_assert!(tcx.dep_graph.is_green(&dep_node));
let key = C::Key::try_recover_key(tcx, &dep_node).unwrap_or_else(|| {
let key = <Q::Cache as QueryCache>::Key::try_recover_key(tcx, &dep_node).unwrap_or_else(|| {
panic!(
"Failed to recover key for {dep_node:?} with key fingerprint {}",
dep_node.key_fingerprint
@@ -386,11 +386,14 @@ pub(crate) fn try_load_from_disk<'tcx, V>(
}
/// Implementation of [`DepKindVTable::force_from_dep_node_fn`] for queries.
pub(crate) fn force_from_dep_node_inner<'tcx, C: QueryCache>(
query: &'tcx QueryVTable<'tcx, C>,
pub(crate) fn force_from_dep_node_inner<'tcx, Q: GetQueryVTable<'tcx>>(
tcx: TyCtxt<'tcx>,
dep_node: DepNode,
// Needed by the vtable function signature, but not used when forcing queries.
_prev_index: SerializedDepNodeIndex,
) -> bool {
let query = Q::query_vtable(tcx);
// We must avoid ever having to call `force_from_dep_node()` for a
// `DepNode::codegen_unit`:
// Since we cannot reconstruct the query key of a `DepNode::codegen_unit`, we
@@ -409,7 +412,7 @@ pub(crate) fn force_from_dep_node_inner<'tcx, C: QueryCache>(
"calling force_from_dep_node() on dep_kinds::codegen_unit"
);
if let Some(key) = C::Key::try_recover_key(tcx, &dep_node) {
if let Some(key) = <Q::Cache as QueryCache>::Key::try_recover_key(tcx, &dep_node) {
force_query(query, tcx, key, dep_node);
true
} else {