@@ -449,20 +449,20 @@ impl<K: DepKind> DepGraph<K> {
449
449
450
450
// Return None if the dep node didn't exist in the previous session
451
451
let prev_index = data. previous . read ( ) . node_to_index_opt ( dep_node) ?;
452
- let color = data. previous . read ( ) . color ( prev_index) ;
453
-
454
- match color {
455
- Some ( DepNodeColor :: Green ) => Some ( ( prev_index, prev_index. rejuvenate ( ) ) ) ,
456
- Some ( DepNodeColor :: Red ) | Some ( DepNodeColor :: New ) => None ,
457
- None => {
458
- // This DepNode and the corresponding query invocation existed
459
- // in the previous compilation session too, so we can try to
460
- // mark it as green by recursively marking all of its
461
- // dependencies green.
462
- self . try_mark_previous_green ( tcx , data , prev_index , & dep_node )
463
- . map ( | dep_node_index| ( prev_index , dep_node_index ) )
464
- }
465
- }
452
+ let prev_deps = data. previous . read ( ) . color_or_edges ( prev_index) ;
453
+ let prev_deps = match prev_deps {
454
+ Err ( prev_deps ) => prev_deps ,
455
+ Ok ( DepNodeColor :: Green ) => return Some ( ( prev_index, prev_index. rejuvenate ( ) ) ) ,
456
+ Ok ( DepNodeColor :: Red ) | Ok ( DepNodeColor :: New ) => return None ,
457
+ } ;
458
+
459
+ // This DepNode and the corresponding query invocation existed
460
+ // in the previous compilation session too, so we can try to
461
+ // mark it as green by recursively marking all of its
462
+ // dependencies green.
463
+ let dep_node_index =
464
+ self . try_mark_previous_green ( tcx , data , prev_index , prev_deps , & dep_node ) ? ;
465
+ Some ( ( prev_index , dep_node_index ) )
466
466
}
467
467
468
468
fn try_mark_parent_green < Ctxt : QueryContext < DepKind = K > > (
@@ -472,11 +472,10 @@ impl<K: DepKind> DepGraph<K> {
472
472
parent_dep_node_index : SerializedDepNodeIndex ,
473
473
dep_node : & DepNode < K > ,
474
474
) -> Option < ( ) > {
475
- let dep_dep_node_color = data. previous . read ( ) . color ( parent_dep_node_index) ;
476
475
let dep_dep_node = & data. previous . read ( ) . index_to_node ( parent_dep_node_index) ;
477
-
478
- match dep_dep_node_color {
479
- Some ( DepNodeColor :: Green ) => {
476
+ let dep_dep_node_color = data . previous . read ( ) . color_or_edges ( parent_dep_node_index ) ;
477
+ let prev_deps = match dep_dep_node_color {
478
+ Ok ( DepNodeColor :: Green ) => {
480
479
// This dependency has been marked as green before, we are
481
480
// still fine and can continue with checking the other
482
481
// dependencies.
@@ -486,7 +485,7 @@ impl<K: DepKind> DepGraph<K> {
486
485
) ;
487
486
return Some ( ( ) ) ;
488
487
}
489
- Some ( DepNodeColor :: Red ) | Some ( DepNodeColor :: New ) => {
488
+ Ok ( DepNodeColor :: Red ) | Ok ( DepNodeColor :: New ) => {
490
489
// We found a dependency the value of which has changed
491
490
// compared to the previous compilation session. We cannot
492
491
// mark the DepNode as green and also don't need to bother
@@ -497,8 +496,8 @@ impl<K: DepKind> DepGraph<K> {
497
496
) ;
498
497
return None ;
499
498
}
500
- None => { }
501
- }
499
+ Err ( prev_deps ) => prev_deps ,
500
+ } ;
502
501
503
502
// We don't know the state of this dependency. If it isn't
504
503
// an eval_always node, let's try to mark it green recursively.
@@ -509,7 +508,7 @@ impl<K: DepKind> DepGraph<K> {
509
508
) ;
510
509
511
510
let node_index =
512
- self . try_mark_previous_green ( tcx, data, parent_dep_node_index, dep_dep_node) ;
511
+ self . try_mark_previous_green ( tcx, data, parent_dep_node_index, prev_deps , dep_dep_node) ;
513
512
if node_index. is_some ( ) {
514
513
debug ! (
515
514
"try_mark_parent_green({:?}) --- managed to MARK dependency {:?} as green" ,
@@ -579,6 +578,7 @@ impl<K: DepKind> DepGraph<K> {
579
578
tcx : Ctxt ,
580
579
data : & DepGraphData < K > ,
581
580
prev_dep_node_index : SerializedDepNodeIndex ,
581
+ prev_deps : & [ SerializedDepNodeIndex ] ,
582
582
dep_node : & DepNode < K > ,
583
583
) -> Option < DepNodeIndex > {
584
584
// We never try to mark eval_always nodes as green
@@ -592,12 +592,6 @@ impl<K: DepKind> DepGraph<K> {
592
592
debug_assert ! ( !dep_node. kind. is_eval_always( ) ) ;
593
593
debug_assert_eq ! ( data. previous. read( ) . index_to_node( prev_dep_node_index) , * dep_node) ;
594
594
595
- let prev_deps = data. previous . read ( ) . color_or_edges ( prev_dep_node_index) ;
596
- let prev_deps = match prev_deps {
597
- Err ( prev_deps) => prev_deps,
598
- Ok ( DepNodeColor :: Green ) => return Some ( prev_dep_node_index. rejuvenate ( ) ) ,
599
- Ok ( DepNodeColor :: Red ) | Ok ( DepNodeColor :: New ) => return None ,
600
- } ;
601
595
for & dep_dep_node_index in prev_deps {
602
596
self . try_mark_parent_green ( tcx, data, dep_dep_node_index, dep_node) ?
603
597
}
0 commit comments