@@ -5,11 +5,9 @@ use rustc_index::{IndexSlice, IndexVec};
55use  rustc_middle:: mir:: ConstraintCategory ; 
66use  rustc_middle:: ty:: { RegionVid ,  TyCtxt ,  VarianceDiagInfo } ; 
77use  rustc_span:: Span ; 
8- use  tracing:: { debug,  instrument } ; 
8+ use  tracing:: debug; 
99
10- use  crate :: region_infer:: { AnnotatedSccs ,  ConstraintSccs ,  RegionDefinition ,  SccAnnotations } ; 
1110use  crate :: type_check:: Locations ; 
12- use  crate :: universal_regions:: UniversalRegions ; 
1311
1412pub ( crate )  mod  graph; 
1513
@@ -53,112 +51,6 @@ impl<'tcx> OutlivesConstraintSet<'tcx> {
5351    )  -> & IndexSlice < OutlivesConstraintIndex ,  OutlivesConstraint < ' tcx > >  { 
5452        & self . outlives 
5553    } 
56- 
57-     /// Computes cycles (SCCs) in the graph of regions. In particular, 
58- /// find all regions R1, R2 such that R1: R2 and R2: R1 and group 
59- /// them into an SCC, and find the relationships between SCCs. 
60- pub ( crate )  fn  compute_sccs ( 
61-         & self , 
62-         static_region :  RegionVid , 
63-         definitions :  & IndexVec < RegionVid ,  RegionDefinition < ' tcx > > , 
64-     )  -> AnnotatedSccs  { 
65-         let  constraint_graph = self . graph ( definitions. len ( ) ) ; 
66-         let  region_graph = & constraint_graph. region_graph ( self ,  static_region) ; 
67-         let  mut  annotation_visitor = SccAnnotations :: new ( definitions) ; 
68-         ( 
69-             ConstraintSccs :: new_with_annotation ( & region_graph,  & mut  annotation_visitor) , 
70-             annotation_visitor. scc_to_annotation , 
71-         ) 
72-     } 
73- 
74-     /// This method handles Universe errors by rewriting the constraint 
75- /// graph. For each strongly connected component in the constraint 
76- /// graph such that there is a series of constraints 
77- ///    A: B: C: ... : X  where 
78- /// A's universe is smaller than X's and A is a placeholder, 
79- /// add a constraint that A: 'static. This is a safe upper bound 
80- /// in the face of borrow checker/trait solver limitations that will 
81- /// eventually go away. 
82- /// 
83- /// For a more precise definition, see the documentation for 
84- /// [`crate::region_infer::RegionTracker`]. 
85- /// 
86- /// This edge case used to be handled during constraint propagation 
87- /// by iterating over the strongly connected components in the constraint 
88- /// graph while maintaining a set of bookkeeping mappings similar 
89- /// to what is stored in `RegionTracker` and manually adding 'static as 
90- /// needed. 
91- /// 
92- /// It was rewritten as part of the Polonius project with the goal of moving 
93- /// higher-kindedness concerns out of the path of the borrow checker, 
94- /// for two reasons: 
95- /// 
96- /// 1. Implementing Polonius is difficult enough without also 
97- ///     handling them. 
98- /// 2. The long-term goal is to handle higher-kinded concerns 
99- ///     in the trait solver, where they belong. This avoids 
100- ///     logic duplication and allows future trait solvers 
101- ///     to compute better bounds than for example our 
102- ///     "must outlive 'static" here. 
103- /// 
104- /// This code is a stop-gap measure in preparation for the future trait solver. 
105- /// 
106- /// Every constraint added by this method is an 
107- /// internal `IllegalUniverse` constraint. 
108- #[ instrument( skip( self ,  universal_regions,  definitions) ) ]  
109-     pub ( crate )  fn  add_outlives_static ( 
110-         & mut  self , 
111-         universal_regions :  & UniversalRegions < ' tcx > , 
112-         definitions :  & IndexVec < RegionVid ,  RegionDefinition < ' tcx > > , 
113-     )  -> AnnotatedSccs  { 
114-         let  fr_static = universal_regions. fr_static ; 
115-         let  ( sccs,  annotations)  = self . compute_sccs ( fr_static,  definitions) ; 
116- 
117-         // Changed to `true` if we added any constraints to `self` and need to 
118-         // recompute SCCs. 
119-         let  mut  added_constraints = false ; 
120- 
121-         for  scc in  sccs. all_sccs ( )  { 
122-             // No point in adding 'static: 'static! 
123-             // This micro-optimisation makes somewhat sense 
124-             // because static outlives *everything*. 
125-             if  scc == sccs. scc ( fr_static)  { 
126-                 continue ; 
127-             } 
128- 
129-             let  annotation = annotations[ scc] ; 
130- 
131-             // If this SCC participates in a universe violation, 
132-             // e.g. if it reaches a region with a universe smaller than 
133-             // the largest region reached, add a requirement that it must 
134-             // outlive `'static`. 
135-             if  annotation. has_incompatible_universes ( )  { 
136-                 // Optimisation opportunity: this will add more constraints than 
137-                 // needed for correctness, since an SCC upstream of another with 
138-                 // a universe violation will "infect" its downstream SCCs to also 
139-                 // outlive static. 
140-                 added_constraints = true ; 
141-                 let  scc_representative_outlives_static = OutlivesConstraint  { 
142-                     sup :  annotation. representative , 
143-                     sub :  fr_static, 
144-                     category :  ConstraintCategory :: IllegalUniverse , 
145-                     locations :  Locations :: All ( rustc_span:: DUMMY_SP ) , 
146-                     span :  rustc_span:: DUMMY_SP , 
147-                     variance_info :  VarianceDiagInfo :: None , 
148-                     from_closure :  false , 
149-                 } ; 
150-                 self . push ( scc_representative_outlives_static) ; 
151-             } 
152-         } 
153- 
154-         if  added_constraints { 
155-             // We changed the constraint set and so must recompute SCCs. 
156-             self . compute_sccs ( fr_static,  definitions) 
157-         }  else  { 
158-             // If we didn't add any back-edges; no more work needs doing 
159-             ( sccs,  annotations) 
160-         } 
161-     } 
16254} 
16355
16456impl < ' tcx >  Index < OutlivesConstraintIndex >  for  OutlivesConstraintSet < ' tcx >  { 
0 commit comments