@@ -411,18 +411,22 @@ where
411411 C :: Key : Clone + DepNodeParams < CTX :: DepContext > ,
412412 CTX : QueryContext ,
413413{
414- let job = match JobOwner :: < ' _ , CTX :: DepKind , C :: Key > :: try_start (
414+ match JobOwner :: < ' _ , CTX :: DepKind , C :: Key > :: try_start (
415415 & tcx,
416416 state,
417417 span,
418418 key. clone ( ) ,
419419 lookup,
420420 query. dep_kind ,
421421 ) {
422- TryGetJob :: NotYetStarted ( job) => job,
422+ TryGetJob :: NotYetStarted ( job) => {
423+ let ( result, dep_node_index) = execute_job ( tcx, key, dep_node, query, job. id , compute) ;
424+ let result = job. complete ( cache, result, dep_node_index) ;
425+ ( result, Some ( dep_node_index) )
426+ }
423427 TryGetJob :: Cycle ( error) => {
424428 let result = mk_cycle ( tcx, error, query. handle_cycle_error , & cache. cache ) ;
425- return ( result, None ) ;
429+ ( result, None )
426430 }
427431 #[ cfg( parallel_compiler) ]
428432 TryGetJob :: JobCompleted ( query_blocked_prof_timer) => {
@@ -440,27 +444,40 @@ where
440444 }
441445 query_blocked_prof_timer. finish_with_query_invocation_id ( index. into ( ) ) ;
442446
443- return ( v, Some ( index) ) ;
447+ ( v, Some ( index) )
444448 }
445- } ;
449+ }
450+ }
446451
452+ fn execute_job < CTX , K , V > (
453+ tcx : CTX ,
454+ key : K ,
455+ dep_node : Option < DepNode < CTX :: DepKind > > ,
456+ query : & QueryVtable < CTX , K , V > ,
457+ job_id : QueryJobId < CTX :: DepKind > ,
458+ compute : fn ( CTX :: DepContext , K ) -> V ,
459+ ) -> ( V , DepNodeIndex )
460+ where
461+ K : Clone + DepNodeParams < CTX :: DepContext > ,
462+ V : Debug ,
463+ CTX : QueryContext ,
464+ {
447465 let dep_graph = tcx. dep_context ( ) . dep_graph ( ) ;
448466
449467 // Fast path for when incr. comp. is off.
450468 if !dep_graph. is_fully_enabled ( ) {
451469 let prof_timer = tcx. dep_context ( ) . profiler ( ) . query_provider ( ) ;
452- let result = tcx. start_query ( job . id , None , || compute ( * tcx. dep_context ( ) , key) ) ;
470+ let result = tcx. start_query ( job_id , None , || compute ( * tcx. dep_context ( ) , key) ) ;
453471 let dep_node_index = dep_graph. next_virtual_depnode_index ( ) ;
454472 prof_timer. finish_with_query_invocation_id ( dep_node_index. into ( ) ) ;
455- let result = job. complete ( cache, result, dep_node_index) ;
456- return ( result, None ) ;
473+ return ( result, dep_node_index) ;
457474 }
458475
459- let ( result , dep_node_index ) = if query. anon {
476+ if query. anon {
460477 let prof_timer = tcx. dep_context ( ) . profiler ( ) . query_provider ( ) ;
461478
462479 let ( ( result, dep_node_index) , diagnostics) = with_diagnostics ( |diagnostics| {
463- tcx. start_query ( job . id , diagnostics, || {
480+ tcx. start_query ( job_id , diagnostics, || {
464481 dep_graph. with_anon_task ( * tcx. dep_context ( ) , query. dep_kind , || {
465482 compute ( * tcx. dep_context ( ) , key)
466483 } )
@@ -479,24 +496,22 @@ where
479496 } else if query. eval_always {
480497 // `to_dep_node` is expensive for some `DepKind`s.
481498 let dep_node = dep_node. unwrap_or_else ( || query. to_dep_node ( * tcx. dep_context ( ) , & key) ) ;
482- force_query_with_job ( tcx, key, job . id , dep_node, query, compute)
499+ force_query_with_job ( tcx, key, job_id , dep_node, query, compute)
483500 } else {
484501 // `to_dep_node` is expensive for some `DepKind`s.
485502 let dep_node = dep_node. unwrap_or_else ( || query. to_dep_node ( * tcx. dep_context ( ) , & key) ) ;
486503 // The diagnostics for this query will be
487504 // promoted to the current session during
488505 // `try_mark_green()`, so we can ignore them here.
489- let loaded = tcx. start_query ( job . id , None , || {
506+ let loaded = tcx. start_query ( job_id , None , || {
490507 try_load_from_disk_and_cache_in_memory ( tcx, & key, & dep_node, query, compute)
491508 } ) ;
492509 if let Some ( ( result, dep_node_index) ) = loaded {
493510 ( result, dep_node_index)
494511 } else {
495- force_query_with_job ( tcx, key, job . id , dep_node, query, compute)
512+ force_query_with_job ( tcx, key, job_id , dep_node, query, compute)
496513 }
497- } ;
498- let result = job. complete ( cache, result, dep_node_index) ;
499- ( result, Some ( dep_node_index) )
514+ }
500515}
501516
502517fn try_load_from_disk_and_cache_in_memory < CTX , K , V > (
0 commit comments