@@ -506,60 +506,57 @@ impl DepGraph {
506
506
return None
507
507
}
508
508
None => {
509
- if dep_dep_node. kind . is_input ( ) {
510
- // This input does not exist anymore.
511
- debug_assert ! ( dep_dep_node. extract_def_id( tcx) . is_none( ) ,
512
- "Encountered input {:?} without color" ,
513
- dep_dep_node) ;
514
- debug ! ( "try_mark_green({:?}) - END - dependency {:?} \
515
- was deleted input", dep_node, dep_dep_node) ;
516
- return None ;
509
+ // We don't know the state of this dependency. If it isn't
510
+ // an input node, let's try to mark it green recursively.
511
+ if !dep_dep_node. kind . is_input ( ) {
512
+ debug ! ( "try_mark_green({:?}) --- state of dependency {:?} \
513
+ is unknown, trying to mark it green", dep_node,
514
+ dep_dep_node) ;
515
+
516
+ if let Some ( node_index) = self . try_mark_green ( tcx, dep_dep_node) {
517
+ debug ! ( "try_mark_green({:?}) --- managed to MARK \
518
+ dependency {:?} as green", dep_node, dep_dep_node) ;
519
+ current_deps. push ( node_index) ;
520
+ continue ;
521
+ }
517
522
}
518
523
519
- debug ! ( "try_mark_green({:?}) --- state of dependency {:?} \
520
- is unknown, trying to mark it green", dep_node,
521
- dep_dep_node) ;
522
-
523
- // We don't know the state of this dependency. Let's try to
524
- // mark it green.
525
- if let Some ( node_index) = self . try_mark_green ( tcx, dep_dep_node) {
526
- debug ! ( "try_mark_green({:?}) --- managed to MARK \
527
- dependency {:?} as green", dep_node, dep_dep_node) ;
528
- current_deps. push ( node_index) ;
529
- } else {
530
- // We failed to mark it green, so we try to force the query.
531
- debug ! ( "try_mark_green({:?}) --- trying to force \
532
- dependency {:?}", dep_node, dep_dep_node) ;
533
- if :: ty:: maps:: force_from_dep_node ( tcx, dep_dep_node) {
534
- let dep_dep_node_color = data. colors
535
- . borrow ( )
536
- . get ( dep_dep_node)
537
- . cloned ( ) ;
538
- match dep_dep_node_color {
539
- Some ( DepNodeColor :: Green ( node_index) ) => {
540
- debug ! ( "try_mark_green({:?}) --- managed to \
541
- FORCE dependency {:?} to green",
542
- dep_node, dep_dep_node) ;
543
- current_deps. push ( node_index) ;
544
- }
545
- Some ( DepNodeColor :: Red ) => {
546
- debug ! ( "try_mark_green({:?}) - END - \
547
- dependency {:?} was red after forcing",
548
- dep_node,
549
- dep_dep_node) ;
550
- return None
551
- }
552
- None => {
553
- bug ! ( "try_mark_green() - Forcing the DepNode \
554
- should have set its color")
555
- }
524
+ // We failed to mark it green, so we try to force the query.
525
+ debug ! ( "try_mark_green({:?}) --- trying to force \
526
+ dependency {:?}", dep_node, dep_dep_node) ;
527
+ if :: ty:: maps:: force_from_dep_node ( tcx, dep_dep_node) {
528
+ let dep_dep_node_color = data. colors
529
+ . borrow ( )
530
+ . get ( dep_dep_node)
531
+ . cloned ( ) ;
532
+ match dep_dep_node_color {
533
+ Some ( DepNodeColor :: Green ( node_index) ) => {
534
+ debug ! ( "try_mark_green({:?}) --- managed to \
535
+ FORCE dependency {:?} to green",
536
+ dep_node, dep_dep_node) ;
537
+ current_deps. push ( node_index) ;
538
+ }
539
+ Some ( DepNodeColor :: Red ) => {
540
+ debug ! ( "try_mark_green({:?}) - END - \
541
+ dependency {:?} was red after forcing",
542
+ dep_node,
543
+ dep_dep_node) ;
544
+ return None
545
+ }
546
+ None => {
547
+ bug ! ( "try_mark_green() - Forcing the DepNode \
548
+ should have set its color")
556
549
}
557
- } else {
558
- // The DepNode could not be forced.
559
- debug ! ( "try_mark_green({:?}) - END - dependency {:?} \
560
- could not be forced", dep_node, dep_dep_node) ;
561
- return None
562
550
}
551
+ } else {
552
+ debug_assert ! ( !dep_dep_node. kind. is_input( ) ||
553
+ dep_dep_node. extract_def_id( tcx) . is_none( ) ,
554
+ "Could not force input that should still exist." ) ;
555
+
556
+ // The DepNode could not be forced.
557
+ debug ! ( "try_mark_green({:?}) - END - dependency {:?} \
558
+ could not be forced", dep_node, dep_dep_node) ;
559
+ return None
563
560
}
564
561
}
565
562
}
@@ -772,7 +769,27 @@ impl CurrentDepGraph {
772
769
read_set : _,
773
770
reads
774
771
} = popped_node {
775
- debug_assert_eq ! ( node, key) ;
772
+ assert_eq ! ( node, key) ;
773
+
774
+ // If this is an input node, we expect that it either has no
775
+ // dependencies, or that it just depends on DepKind::CrateMetadata
776
+ // or DepKind::Krate. This happens for some "thin wrapper queries"
777
+ // like `crate_disambiguator` which sometimes have zero deps (for
778
+ // when called for LOCAL_CRATE) or they depend on a CrateMetadata
779
+ // node.
780
+ if cfg ! ( debug_assertions) {
781
+ if node. kind . is_input ( ) && reads. len ( ) > 0 &&
782
+ reads. iter ( ) . any ( |& i| {
783
+ !( self . nodes [ i] . kind == DepKind :: CrateMetadata ||
784
+ self . nodes [ i] . kind == DepKind :: Krate )
785
+ } )
786
+ {
787
+ bug ! ( "Input node {:?} with unexpected reads: {:?}" ,
788
+ node,
789
+ reads. iter( ) . map( |& i| self . nodes[ i] ) . collect:: <Vec <_>>( ) )
790
+ }
791
+ }
792
+
776
793
self . alloc_node ( node, reads)
777
794
} else {
778
795
bug ! ( "pop_task() - Expected regular task to be popped" )
@@ -793,6 +810,8 @@ impl CurrentDepGraph {
793
810
read_set : _,
794
811
reads
795
812
} = popped_node {
813
+ debug_assert ! ( !kind. is_input( ) ) ;
814
+
796
815
let mut fingerprint = self . anon_id_seed ;
797
816
let mut hasher = StableHasher :: new ( ) ;
798
817
0 commit comments