Skip to content

Commit 70f20ac

Browse files
committed
Move force_with_dep_node outside the giant macro
1 parent 375d780 commit 70f20ac

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

compiler/rustc_query_impl/src/plumbing.rs

+26-16
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ use rustc_errors::{Diagnostic, Handler};
1010
use rustc_middle::dep_graph::{self, DepKind, DepNode, DepNodeIndex, SerializedDepNodeIndex};
1111
use rustc_middle::ty::tls::{self, ImplicitCtxt};
1212
use rustc_middle::ty::{self, TyCtxt};
13-
use rustc_query_system::dep_graph::HasDepContext;
13+
use rustc_query_system::dep_graph::{DepNodeParams, HasDepContext};
1414
use rustc_query_system::ich::StableHashingContext;
1515
use rustc_query_system::query::{
16-
QueryContext, QueryJobId, QueryMap, QuerySideEffects, QueryStackFrame,
16+
force_query, QueryContext, QueryDescription, QueryJobId, QueryMap, QuerySideEffects,
17+
QueryStackFrame,
1718
};
1819
use std::any::Any;
1920
use std::num::NonZeroU64;
@@ -315,6 +316,27 @@ pub(crate) fn try_load_from_on_disk_cache<'tcx, K, V>(
315316
}
316317
}
317318

319+
pub(crate) fn force_from_dep_node<'tcx, Q>(
320+
tcx: TyCtxt<'tcx>,
321+
// dep_node: rustc_query_system::dep_graph::DepNode<CTX::DepKind>,
322+
dep_node: DepNode,
323+
recover: fn(TyCtxt<'tcx>, DepNode) -> Option<Q::Key>,
324+
) -> bool
325+
where
326+
Q: QueryDescription<QueryCtxt<'tcx>>,
327+
Q::Key: DepNodeParams<TyCtxt<'tcx>>,
328+
{
329+
if let Some(key) = recover(tcx, dep_node) {
330+
#[cfg(debug_assertions)]
331+
let _guard = tracing::span!(tracing::Level::TRACE, stringify!($name), ?key).entered();
332+
let tcx = QueryCtxt::from_tcx(tcx);
333+
force_query::<Q, _>(tcx, key, dep_node);
334+
true
335+
} else {
336+
false
337+
}
338+
}
339+
318340
// NOTE: `$V` isn't used here, but we still need to match on it so it can be passed to other macros
319341
// invoked by `rustc_query_append`.
320342
macro_rules! define_queries {
@@ -385,7 +407,7 @@ macro_rules! define_queries {
385407
use super::*;
386408
use rustc_middle::dep_graph::DepNode;
387409
use rustc_query_system::dep_graph::DepNodeParams;
388-
use rustc_query_system::query::{force_query, QueryDescription};
410+
use rustc_query_system::query::QueryDescription;
389411
use rustc_query_system::dep_graph::FingerprintStyle;
390412

391413
// We use this for most things when incr. comp. is turned off.
@@ -462,23 +484,11 @@ macro_rules! define_queries {
462484
<<queries::$name<'_> as QueryConfig>::Key as DepNodeParams<TyCtxt<'_>>>::recover(tcx, &dep_node)
463485
}
464486

465-
fn force_from_dep_node(tcx: TyCtxt<'_>, dep_node: DepNode) -> bool {
466-
if let Some(key) = recover(tcx, dep_node) {
467-
#[cfg(debug_assertions)]
468-
let _guard = tracing::span!(tracing::Level::TRACE, stringify!($name), ?key).entered();
469-
let tcx = QueryCtxt::from_tcx(tcx);
470-
force_query::<queries::$name<'_>, _>(tcx, key, dep_node);
471-
true
472-
} else {
473-
false
474-
}
475-
}
476-
477487
DepKindStruct {
478488
is_anon,
479489
is_eval_always,
480490
fingerprint_style,
481-
force_from_dep_node: Some(force_from_dep_node),
491+
force_from_dep_node: Some(|tcx, dep_node| $crate::plumbing::force_from_dep_node::<queries::$name<'_>>(tcx, dep_node, recover)),
482492
try_load_from_on_disk_cache: Some(|tcx, key| $crate::plumbing::try_load_from_on_disk_cache(tcx, key, recover, queries::$name::cache_on_disk, TyCtxt::$name)),
483493
}
484494
})*

0 commit comments

Comments
 (0)