@@ -37,21 +37,20 @@ mod constraints;
37
37
mod dump;
38
38
pub ( crate ) mod legacy;
39
39
mod liveness_constraints;
40
+ mod typeck_constraints;
40
41
41
42
use std:: collections:: BTreeMap ;
42
43
43
44
use rustc_index:: bit_set:: SparseBitMatrix ;
44
- use rustc_middle:: mir:: { Body , Location } ;
45
- use rustc_middle:: ty:: RegionVid ;
45
+ use rustc_middle:: mir:: Body ;
46
+ use rustc_middle:: ty:: { RegionVid , TyCtxt } ;
46
47
use rustc_mir_dataflow:: points:: PointIndex ;
47
48
48
49
pub ( crate ) use self :: constraints:: * ;
49
50
pub ( crate ) use self :: dump:: dump_polonius_mir;
50
51
use self :: liveness_constraints:: create_liveness_constraints;
52
+ use self :: typeck_constraints:: convert_typeck_constraints;
51
53
use crate :: RegionInferenceContext ;
52
- use crate :: constraints:: OutlivesConstraint ;
53
- use crate :: region_infer:: values:: LivenessValues ;
54
- use crate :: type_check:: Locations ;
55
54
56
55
/// This struct holds the data needed to create the Polonius localized constraints.
57
56
pub ( crate ) struct PoloniusContext {
@@ -88,14 +87,17 @@ impl PoloniusContext {
88
87
/// - encoding liveness constraints
89
88
pub ( crate ) fn create_localized_constraints < ' tcx > (
90
89
& self ,
90
+ tcx : TyCtxt < ' tcx > ,
91
91
regioncx : & RegionInferenceContext < ' tcx > ,
92
92
body : & Body < ' tcx > ,
93
93
) -> LocalizedOutlivesConstraintSet {
94
94
let mut localized_outlives_constraints = LocalizedOutlivesConstraintSet :: default ( ) ;
95
95
convert_typeck_constraints (
96
+ tcx,
96
97
body,
97
98
regioncx. liveness_constraints ( ) ,
98
99
regioncx. outlives_constraints ( ) ,
100
+ regioncx. universal_regions ( ) ,
99
101
& mut localized_outlives_constraints,
100
102
) ;
101
103
@@ -117,38 +119,3 @@ impl PoloniusContext {
117
119
localized_outlives_constraints
118
120
}
119
121
}
120
-
121
- /// Propagate loans throughout the subset graph at a given point (with some subtleties around the
122
- /// location where effects start to be visible).
123
- fn convert_typeck_constraints < ' tcx > (
124
- body : & Body < ' tcx > ,
125
- liveness : & LivenessValues ,
126
- outlives_constraints : impl Iterator < Item = OutlivesConstraint < ' tcx > > ,
127
- localized_outlives_constraints : & mut LocalizedOutlivesConstraintSet ,
128
- ) {
129
- for outlives_constraint in outlives_constraints {
130
- match outlives_constraint. locations {
131
- Locations :: All ( _) => {
132
- // For now, turn logical constraints holding at all points into physical edges at
133
- // every point in the graph.
134
- // FIXME: encode this into *traversal* instead.
135
- for ( block, bb) in body. basic_blocks . iter_enumerated ( ) {
136
- let statement_count = bb. statements . len ( ) ;
137
- for statement_index in 0 ..=statement_count {
138
- let current_location = Location { block, statement_index } ;
139
- let current_point = liveness. point_from_location ( current_location) ;
140
-
141
- localized_outlives_constraints. push ( LocalizedOutlivesConstraint {
142
- source : outlives_constraint. sup ,
143
- from : current_point,
144
- target : outlives_constraint. sub ,
145
- to : current_point,
146
- } ) ;
147
- }
148
- }
149
- }
150
-
151
- _ => { }
152
- }
153
- }
154
- }
0 commit comments