@@ -29,10 +29,10 @@ use rustc_middle::ty::{self, TyCtxt};
2929use rustc_serialize:: { Decodable , Encodable } ;
3030use rustc_span:: def_id:: LOCAL_CRATE ;
3131
32- use crate :: collect_active_jobs_from_all_queries;
3332use crate :: error:: { QueryOverflow , QueryOverflowNote } ;
3433use crate :: execution:: { all_inactive, force_query} ;
3534use crate :: job:: find_dep_kind_root;
35+ use crate :: { GetQueryVTable , collect_active_jobs_from_all_queries} ;
3636
3737fn 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