@@ -14,9 +14,9 @@ use std::num::NonZeroU32;
1414
1515#[ cfg( parallel_compiler) ]  
1616use  { 
17+     crate :: dep_graph:: DepKind , 
1718    parking_lot:: { Condvar ,  Mutex } , 
1819    rustc_data_structures:: fx:: FxHashSet , 
19-     rustc_data_structures:: stable_hasher:: { HashStable ,  StableHasher } , 
2020    rustc_data_structures:: sync:: Lock , 
2121    rustc_data_structures:: sync:: Lrc , 
2222    rustc_data_structures:: { jobserver,  OnDrop } , 
@@ -417,30 +417,23 @@ where
417417
418418// Deterministically pick an query from a list 
419419#[ cfg( parallel_compiler) ]  
420- fn  pick_query < ' a ,  CTX ,  T ,  F > ( 
421-     query_map :  & QueryMap < CTX :: DepKind > , 
422-     tcx :  CTX , 
423-     queries :  & ' a  [ T ] , 
424-     f :  F , 
425- )  -> & ' a  T 
420+ fn  pick_query < ' a ,  D ,  T ,  F > ( query_map :  & QueryMap < D > ,  queries :  & ' a  [ T ] ,  f :  F )  -> & ' a  T 
426421where 
427-     CTX :   QueryContext , 
428-     F :  Fn ( & T )  -> ( Span ,  QueryJobId < CTX :: DepKind > ) , 
422+     D :   Copy  +  Clone  +  Eq  +  Hash , 
423+     F :  Fn ( & T )  -> ( Span ,  QueryJobId < D > ) , 
429424{ 
430425    // Deterministically pick an entry point 
431426    // FIXME: Sort this instead 
432-     let  mut  hcx = tcx. dep_context ( ) . create_stable_hashing_context ( ) ; 
433427    queries
434428        . iter ( ) 
435429        . min_by_key ( |v| { 
436430            let  ( span,  query)  = f ( v) ; 
437-             let  mut  stable_hasher = StableHasher :: new ( ) ; 
438-             query. query ( query_map) . hash_stable ( & mut  hcx,  & mut  stable_hasher) ; 
431+             let  hash = query. query ( query_map) . hash ; 
439432            // Prefer entry points which have valid spans for nicer error messages 
440433            // We add an integer to the tuple ensuring that entry points 
441434            // with valid spans are picked first 
442435            let  span_cmp = if  span == DUMMY_SP  {  1  }  else  {  0  } ; 
443-             ( span_cmp,  stable_hasher . finish :: < u64 > ( ) ) 
436+             ( span_cmp,  hash ) 
444437        } ) 
445438        . unwrap ( ) 
446439} 
@@ -451,11 +444,10 @@ where
451444/// If a cycle was not found, the starting query is removed from `jobs` and 
452445/// the function returns false. 
453446#[ cfg( parallel_compiler) ]  
454- fn  remove_cycle < CTX :  QueryContext > ( 
455-     query_map :  & QueryMap < CTX :: DepKind > , 
456-     jobs :  & mut  Vec < QueryJobId < CTX :: DepKind > > , 
457-     wakelist :  & mut  Vec < Lrc < QueryWaiter < CTX :: DepKind > > > , 
458-     tcx :  CTX , 
447+ fn  remove_cycle < D :  DepKind > ( 
448+     query_map :  & QueryMap < D > , 
449+     jobs :  & mut  Vec < QueryJobId < D > > , 
450+     wakelist :  & mut  Vec < Lrc < QueryWaiter < D > > > , 
459451)  -> bool  { 
460452    let  mut  visited = FxHashSet :: default ( ) ; 
461453    let  mut  stack = Vec :: new ( ) ; 
@@ -505,15 +497,15 @@ fn remove_cycle<CTX: QueryContext>(
505497                        None 
506498                    }  else  { 
507499                        // Deterministically pick one of the waiters to show to the user 
508-                         let  waiter = * pick_query ( query_map,  tcx ,   & waiters,  |s| * s) ; 
500+                         let  waiter = * pick_query ( query_map,  & waiters,  |s| * s) ; 
509501                        Some ( ( span,  query,  Some ( waiter) ) ) 
510502                    } 
511503                } 
512504            } ) 
513-             . collect :: < Vec < ( Span ,  QueryJobId < CTX :: DepKind > ,  Option < ( Span ,  QueryJobId < CTX :: DepKind > ) > ) > > ( ) ; 
505+             . collect :: < Vec < ( Span ,  QueryJobId < D > ,  Option < ( Span ,  QueryJobId < D > ) > ) > > ( ) ; 
514506
515507        // Deterministically pick an entry point 
516-         let  ( _,  entry_point,  usage)  = pick_query ( query_map,  tcx ,   & entry_points,  |e| ( e. 0 ,  e. 1 ) ) ; 
508+         let  ( _,  entry_point,  usage)  = pick_query ( query_map,  & entry_points,  |e| ( e. 0 ,  e. 1 ) ) ; 
517509
518510        // Shift the stack so that our entry point is first 
519511        let  entry_point_pos = stack. iter ( ) . position ( |( _,  query) | query == entry_point) ; 
@@ -570,7 +562,7 @@ pub fn deadlock<CTX: QueryContext>(tcx: CTX, registry: &rayon_core::Registry) {
570562    let  mut  found_cycle = false ; 
571563
572564    while  jobs. len ( )  > 0  { 
573-         if  remove_cycle ( & query_map,  & mut  jobs,  & mut  wakelist,  tcx )  { 
565+         if  remove_cycle ( & query_map,  & mut  jobs,  & mut  wakelist)  { 
574566            found_cycle = true ; 
575567        } 
576568    } 
0 commit comments