@@ -10,10 +10,11 @@ use rustc_errors::{Diagnostic, Handler};
10
10
use rustc_middle:: dep_graph:: { self , DepKind , DepNode , DepNodeIndex , SerializedDepNodeIndex } ;
11
11
use rustc_middle:: ty:: tls:: { self , ImplicitCtxt } ;
12
12
use rustc_middle:: ty:: { self , TyCtxt } ;
13
- use rustc_query_system:: dep_graph:: HasDepContext ;
13
+ use rustc_query_system:: dep_graph:: { DepNodeParams , HasDepContext } ;
14
14
use rustc_query_system:: ich:: StableHashingContext ;
15
15
use rustc_query_system:: query:: {
16
- QueryContext , QueryJobId , QueryMap , QuerySideEffects , QueryStackFrame ,
16
+ force_query, QueryContext , QueryDescription , QueryJobId , QueryMap , QuerySideEffects ,
17
+ QueryStackFrame ,
17
18
} ;
18
19
use std:: any:: Any ;
19
20
use std:: num:: NonZeroU64 ;
@@ -315,6 +316,27 @@ pub(crate) fn try_load_from_on_disk_cache<'tcx, K, V>(
315
316
}
316
317
}
317
318
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
+
318
340
// NOTE: `$V` isn't used here, but we still need to match on it so it can be passed to other macros
319
341
// invoked by `rustc_query_append`.
320
342
macro_rules! define_queries {
@@ -385,7 +407,7 @@ macro_rules! define_queries {
385
407
use super :: * ;
386
408
use rustc_middle:: dep_graph:: DepNode ;
387
409
use rustc_query_system:: dep_graph:: DepNodeParams ;
388
- use rustc_query_system:: query:: { force_query , QueryDescription } ;
410
+ use rustc_query_system:: query:: QueryDescription ;
389
411
use rustc_query_system:: dep_graph:: FingerprintStyle ;
390
412
391
413
// We use this for most things when incr. comp. is turned off.
@@ -462,23 +484,11 @@ macro_rules! define_queries {
462
484
<<queries:: $name<' _> as QueryConfig >:: Key as DepNodeParams <TyCtxt <' _>>>:: recover( tcx, & dep_node)
463
485
}
464
486
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
-
477
487
DepKindStruct {
478
488
is_anon,
479
489
is_eval_always,
480
490
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 ) ) ,
482
492
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) ) ,
483
493
}
484
494
} ) *
0 commit comments