From 4284edc3b47bc5bde0e509f8cabb4e8cd2be5900 Mon Sep 17 00:00:00 2001 From: Zalathar Date: Thu, 26 Feb 2026 17:56:46 +1100 Subject: [PATCH] Avoid some trivial wrapper closures in `DepKindVTable` --- .../rustc_query_impl/src/dep_kind_vtables.rs | 8 ++------ compiler/rustc_query_impl/src/plumbing.rs | 17 ++++++++++------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/compiler/rustc_query_impl/src/dep_kind_vtables.rs b/compiler/rustc_query_impl/src/dep_kind_vtables.rs index ef7e4e64791d..8395a153e12e 100644 --- a/compiler/rustc_query_impl/src/dep_kind_vtables.rs +++ b/compiler/rustc_query_impl/src/dep_kind_vtables.rs @@ -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::), + promote_from_disk_fn: Some(promote_from_disk_inner::), } } diff --git a/compiler/rustc_query_impl/src/plumbing.rs b/compiler/rustc_query_impl/src/plumbing.rs index d5f3610f3bba..fde3de7fec52 100644 --- a/compiler/rustc_query_impl/src/plumbing.rs +++ b/compiler/rustc_query_impl/src/plumbing.rs @@ -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 = ::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) = ::Key::try_recover_key(tcx, &dep_node) { force_query(query, tcx, key, dep_node); true } else {