Skip to content

Commit 4284edc

Browse files
committed
Avoid some trivial wrapper closures in DepKindVTable
1 parent c0e7a43 commit 4284edc

File tree

2 files changed

+12
-13
lines changed

2 files changed

+12
-13
lines changed

compiler/rustc_query_impl/src/dep_kind_vtables.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,8 @@ where
129129
is_anon,
130130
is_eval_always,
131131
key_fingerprint_style,
132-
force_from_dep_node_fn: Some(|tcx, dep_node, _| {
133-
force_from_dep_node_inner(Q::query_vtable(tcx), tcx, dep_node)
134-
}),
135-
promote_from_disk_fn: Some(|tcx, dep_node| {
136-
promote_from_disk_inner(Q::query_vtable(tcx), tcx, dep_node)
137-
}),
132+
force_from_dep_node_fn: Some(force_from_dep_node_inner::<Q>),
133+
promote_from_disk_fn: Some(promote_from_disk_inner::<Q>),
138134
}
139135
}
140136

compiler/rustc_query_impl/src/plumbing.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ use rustc_middle::ty::{self, TyCtxt};
2929
use rustc_serialize::{Decodable, Encodable};
3030
use rustc_span::def_id::LOCAL_CRATE;
3131

32-
use crate::collect_active_jobs_from_all_queries;
3332
use crate::error::{QueryOverflow, QueryOverflowNote};
3433
use crate::execution::{all_inactive, force_query};
3534
use crate::job::find_dep_kind_root;
35+
use crate::{GetQueryVTable, collect_active_jobs_from_all_queries};
3636

3737
fn depth_limit_error<'tcx>(tcx: TyCtxt<'tcx>, job: QueryJobId) {
3838
let job_map =
@@ -333,14 +333,14 @@ pub(crate) fn query_key_hash_verify<'tcx, C: QueryCache>(
333333
}
334334

335335
/// Implementation of [`DepKindVTable::promote_from_disk_fn`] for queries.
336-
pub(crate) fn promote_from_disk_inner<'tcx, C: QueryCache>(
337-
query: &'tcx QueryVTable<'tcx, C>,
336+
pub(crate) fn promote_from_disk_inner<'tcx, Q: GetQueryVTable<'tcx>>(
338337
tcx: TyCtxt<'tcx>,
339338
dep_node: DepNode,
340339
) {
340+
let query = Q::query_vtable(tcx);
341341
debug_assert!(tcx.dep_graph.is_green(&dep_node));
342342

343-
let key = C::Key::try_recover_key(tcx, &dep_node).unwrap_or_else(|| {
343+
let key = <Q::Cache as QueryCache>::Key::try_recover_key(tcx, &dep_node).unwrap_or_else(|| {
344344
panic!(
345345
"Failed to recover key for {dep_node:?} with key fingerprint {}",
346346
dep_node.key_fingerprint
@@ -386,11 +386,14 @@ where
386386
}
387387

388388
/// Implementation of [`DepKindVTable::force_from_dep_node_fn`] for queries.
389-
pub(crate) fn force_from_dep_node_inner<'tcx, C: QueryCache>(
390-
query: &'tcx QueryVTable<'tcx, C>,
389+
pub(crate) fn force_from_dep_node_inner<'tcx, Q: GetQueryVTable<'tcx>>(
391390
tcx: TyCtxt<'tcx>,
392391
dep_node: DepNode,
392+
// Needed by the vtable function signature, but not used when forcing queries.
393+
_prev_index: SerializedDepNodeIndex,
393394
) -> bool {
395+
let query = Q::query_vtable(tcx);
396+
394397
// We must avoid ever having to call `force_from_dep_node()` for a
395398
// `DepNode::codegen_unit`:
396399
// 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>(
409412
"calling force_from_dep_node() on dep_kinds::codegen_unit"
410413
);
411414

412-
if let Some(key) = C::Key::try_recover_key(tcx, &dep_node) {
415+
if let Some(key) = <Q::Cache as QueryCache>::Key::try_recover_key(tcx, &dep_node) {
413416
force_query(query, tcx, key, dep_node);
414417
true
415418
} else {

0 commit comments

Comments
 (0)