@@ -10,10 +10,11 @@ use rustc_errors::{Diagnostic, Handler};
1010use rustc_middle:: dep_graph:: { self , DepKind , DepNode , DepNodeIndex , SerializedDepNodeIndex } ;
1111use rustc_middle:: ty:: tls:: { self , ImplicitCtxt } ;
1212use rustc_middle:: ty:: { self , TyCtxt } ;
13- use rustc_query_system:: dep_graph:: HasDepContext ;
13+ use rustc_query_system:: dep_graph:: { DepNodeParams , HasDepContext } ;
1414use rustc_query_system:: ich:: StableHashingContext ;
1515use rustc_query_system:: query:: {
16- QueryContext , QueryJobId , QueryMap , QuerySideEffects , QueryStackFrame ,
16+ force_query, QueryContext , QueryDescription , QueryJobId , QueryMap , QuerySideEffects ,
17+ QueryStackFrame ,
1718} ;
1819use std:: any:: Any ;
1920use 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`.
320342macro_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