@@ -11,7 +11,9 @@ use crate::constraints::ConstraintSccIndex;
1111use  crate :: handle_placeholders:: { SccAnnotations ,  region_definitions} ; 
1212use  crate :: region_infer:: reverse_sccs:: ReverseSccGraph ; 
1313use  crate :: region_infer:: values:: RegionValues ; 
14- use  crate :: region_infer:: { ConstraintSccs ,  RegionDefinition ,  RegionTracker ,  Representative } ; 
14+ use  crate :: region_infer:: { 
15+     ConstraintSccs ,  OutlivesConstraintSet ,  RegionDefinition ,  RegionTracker ,  Representative , 
16+ } ; 
1517use  crate :: type_check:: MirTypeckRegionConstraints ; 
1618use  crate :: type_check:: free_region_relations:: UniversalRegionRelations ; 
1719use  crate :: universal_regions:: UniversalRegions ; 
@@ -39,16 +41,36 @@ impl<'a, 'tcx> RegionCtxt<'a, 'tcx> {
3941        location_map :  Rc < DenseLocationMap > , 
4042        constraints :  & MirTypeckRegionConstraints < ' tcx > , 
4143    )  -> RegionCtxt < ' a ,  ' tcx >  { 
44+         let  mut  outlives_constraints = constraints. outlives_constraints . clone ( ) ; 
4245        let  universal_regions = & universal_region_relations. universal_regions ; 
4346        let  ( definitions,  _has_placeholders)  = region_definitions ( infcx,  universal_regions) ; 
47+ 
48+         let  compute_sccs =
49+             |outlives_constraints :  & OutlivesConstraintSet < ' tcx > , 
50+              annotations :  & mut  SccAnnotations < ' _ ,  ' tcx ,  RegionTracker > | { 
51+                 ConstraintSccs :: new_with_annotation ( 
52+                     & outlives_constraints
53+                         . graph ( definitions. len ( ) ) 
54+                         . region_graph ( outlives_constraints,  universal_regions. fr_static ) , 
55+                     annotations, 
56+                 ) 
57+             } ; 
58+ 
4459        let  mut  scc_annotations = SccAnnotations :: init ( & definitions) ; 
45-         let  constraint_sccs = ConstraintSccs :: new_with_annotation ( 
46-             & constraints
47-                 . outlives_constraints 
48-                 . graph ( definitions. len ( ) ) 
49-                 . region_graph ( & constraints. outlives_constraints ,  universal_regions. fr_static ) , 
50-             & mut  scc_annotations, 
60+         let  mut  constraint_sccs = compute_sccs ( & outlives_constraints,  & mut  scc_annotations) ; 
61+ 
62+         let  added_constraints = crate :: handle_placeholders:: rewrite_placeholder_outlives ( 
63+             & constraint_sccs, 
64+             & scc_annotations, 
65+             universal_regions. fr_static , 
66+             & mut  outlives_constraints, 
5167        ) ; 
68+ 
69+         if  added_constraints { 
70+             scc_annotations = SccAnnotations :: init ( & definitions) ; 
71+             constraint_sccs = compute_sccs ( & outlives_constraints,  & mut  scc_annotations) ; 
72+         } 
73+ 
5274        let  scc_annotations = scc_annotations. scc_to_annotation ; 
5375
5476        // Unlike the `RegionInferenceContext`, we only care about free regions 
0 commit comments