Skip to content

Commit 6234a89

Browse files
committed
store RegionVariableInfo and not just RegionVariableOrigin
1 parent 360cbf2 commit 6234a89

File tree

4 files changed

+42
-35
lines changed
  • src
    • librustc/infer
    • librustc_mir/borrow_check/nll/region_infer

4 files changed

+42
-35
lines changed

src/librustc/infer/lexical_region_resolve/mod.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use infer::RegionVariableOrigin;
1515
use infer::region_constraints::Constraint;
1616
use infer::region_constraints::GenericKind;
1717
use infer::region_constraints::RegionConstraintData;
18-
use infer::region_constraints::VarOrigins;
18+
use infer::region_constraints::VarInfos;
1919
use infer::region_constraints::VerifyBound;
2020
use middle::free_region::RegionRelations;
2121
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
@@ -37,7 +37,7 @@ mod graphviz;
3737
/// all the variables as well as a set of errors that must be reported.
3838
pub fn resolve<'tcx>(
3939
region_rels: &RegionRelations<'_, '_, 'tcx>,
40-
var_origins: VarOrigins,
40+
var_infos: VarInfos,
4141
data: RegionConstraintData<'tcx>,
4242
) -> (
4343
LexicalRegionResolutions<'tcx>,
@@ -47,7 +47,7 @@ pub fn resolve<'tcx>(
4747
let mut errors = vec![];
4848
let mut resolver = LexicalResolver {
4949
region_rels,
50-
var_origins,
50+
var_infos,
5151
data,
5252
};
5353
let values = resolver.infer_variable_values(&mut errors);
@@ -103,7 +103,7 @@ type RegionGraph<'tcx> = graph::Graph<(), Constraint<'tcx>>;
103103

104104
struct LexicalResolver<'cx, 'gcx: 'tcx, 'tcx: 'cx> {
105105
region_rels: &'cx RegionRelations<'cx, 'gcx, 'tcx>,
106-
var_origins: VarOrigins,
106+
var_infos: VarInfos,
107107
data: RegionConstraintData<'tcx>,
108108
}
109109

@@ -132,7 +132,7 @@ impl<'cx, 'gcx, 'tcx> LexicalResolver<'cx, 'gcx, 'tcx> {
132132
}
133133

134134
fn num_vars(&self) -> usize {
135-
self.var_origins.len()
135+
self.var_infos.len()
136136
}
137137

138138
/// Initially, the value for all variables is set to `'empty`, the
@@ -279,7 +279,7 @@ impl<'cx, 'gcx, 'tcx> LexicalResolver<'cx, 'gcx, 'tcx> {
279279

280280
(&ReVar(v_id), _) | (_, &ReVar(v_id)) => {
281281
span_bug!(
282-
self.var_origins[v_id].span(),
282+
self.var_infos[v_id].origin.span(),
283283
"lub_concrete_regions invoked with non-concrete \
284284
regions: {:?}, {:?}",
285285
a,
@@ -576,7 +576,7 @@ impl<'cx, 'gcx, 'tcx> LexicalResolver<'cx, 'gcx, 'tcx> {
576576
if !self.region_rels
577577
.is_subregion_of(lower_bound.region, upper_bound.region)
578578
{
579-
let origin = self.var_origins[node_idx].clone();
579+
let origin = self.var_infos[node_idx].origin.clone();
580580
debug!(
581581
"region inference error at {:?} for {:?}: SubSupConflict sub: {:?} \
582582
sup: {:?}",
@@ -598,7 +598,7 @@ impl<'cx, 'gcx, 'tcx> LexicalResolver<'cx, 'gcx, 'tcx> {
598598
}
599599

600600
span_bug!(
601-
self.var_origins[node_idx].span(),
601+
self.var_infos[node_idx].origin.span(),
602602
"collect_error_for_expanding_node() could not find \
603603
error for var {:?}, lower_bounds={:?}, \
604604
upper_bounds={:?}",

src/librustc/infer/mod.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ use arena::SyncDroplessArena;
4242
use self::combine::CombineFields;
4343
use self::higher_ranked::HrMatchResult;
4444
use self::region_constraints::{RegionConstraintCollector, RegionSnapshot};
45-
use self::region_constraints::{GenericKind, VerifyBound, RegionConstraintData, VarOrigins};
45+
use self::region_constraints::{GenericKind, VerifyBound, RegionConstraintData, VarInfos};
4646
use self::lexical_region_resolve::LexicalRegionResolutions;
4747
use self::outlives::env::OutlivesEnvironment;
4848
use self::type_variable::TypeVariableOrigin;
@@ -889,7 +889,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
889889

890890
/// Number of region variables created so far.
891891
pub fn num_region_vars(&self) -> usize {
892-
self.borrow_region_constraints().var_origins().len()
892+
self.borrow_region_constraints().num_region_vars()
893893
}
894894

895895
/// Just a convenient wrapper of `next_region_var` for using during NLL.
@@ -1017,12 +1017,12 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
10171017
region_context,
10181018
region_map,
10191019
outlives_env.free_region_map());
1020-
let (var_origins, data) = self.region_constraints.borrow_mut()
1020+
let (var_infos, data) = self.region_constraints.borrow_mut()
10211021
.take()
10221022
.expect("regions already resolved")
1023-
.into_origins_and_data();
1023+
.into_infos_and_data();
10241024
let (lexical_region_resolutions, errors) =
1025-
lexical_region_resolve::resolve(region_rels, var_origins, data);
1025+
lexical_region_resolve::resolve(region_rels, var_infos, data);
10261026

10271027
let old_value = self.lexical_region_resolutions.replace(Some(lexical_region_resolutions));
10281028
assert!(old_value.is_none());
@@ -1070,13 +1070,13 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
10701070
/// hence that `resolve_regions_and_report_errors` can never be
10711071
/// called. This is used only during NLL processing to "hand off" ownership
10721072
/// of the set of region vairables into the NLL region context.
1073-
pub fn take_region_var_origins(&self) -> VarOrigins {
1074-
let (var_origins, data) = self.region_constraints.borrow_mut()
1073+
pub fn take_region_var_origins(&self) -> VarInfos {
1074+
let (var_infos, data) = self.region_constraints.borrow_mut()
10751075
.take()
10761076
.expect("regions already resolved")
1077-
.into_origins_and_data();
1077+
.into_infos_and_data();
10781078
assert!(data.is_empty());
1079-
var_origins
1079+
var_infos
10801080
}
10811081

10821082
pub fn ty_to_string(&self, t: Ty<'tcx>) -> String {

src/librustc/infer/region_constraints/mod.rs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ mod taint;
3333

3434
pub struct RegionConstraintCollector<'tcx> {
3535
/// For each `RegionVid`, the corresponding `RegionVariableOrigin`.
36-
var_origins: IndexVec<RegionVid, RegionVariableOrigin>,
36+
var_infos: IndexVec<RegionVid, RegionVariableInfo>,
3737

3838
data: RegionConstraintData<'tcx>,
3939

@@ -76,7 +76,7 @@ pub struct RegionConstraintCollector<'tcx> {
7676
unification_table: ut::UnificationTable<ut::InPlace<ty::RegionVid>>,
7777
}
7878

79-
pub type VarOrigins = IndexVec<RegionVid, RegionVariableOrigin>;
79+
pub type VarInfos = IndexVec<RegionVid, RegionVariableInfo>;
8080

8181
/// The full set of region constraints gathered up by the collector.
8282
/// Describes constraints between the region variables and other
@@ -230,6 +230,11 @@ enum CombineMapType {
230230

231231
type CombineMap<'tcx> = FxHashMap<TwoRegions<'tcx>, RegionVid>;
232232

233+
#[derive(Debug, Clone, Copy)]
234+
pub struct RegionVariableInfo {
235+
pub origin: RegionVariableOrigin,
236+
}
237+
233238
pub struct RegionSnapshot {
234239
length: usize,
235240
region_snapshot: ut::Snapshot<ut::InPlace<ty::RegionVid>>,
@@ -273,7 +278,7 @@ impl TaintDirections {
273278
impl<'tcx> RegionConstraintCollector<'tcx> {
274279
pub fn new() -> RegionConstraintCollector<'tcx> {
275280
RegionConstraintCollector {
276-
var_origins: VarOrigins::default(),
281+
var_infos: VarInfos::default(),
277282
data: RegionConstraintData::default(),
278283
lubs: FxHashMap(),
279284
glbs: FxHashMap(),
@@ -284,8 +289,8 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
284289
}
285290
}
286291

287-
pub fn var_origins(&self) -> &VarOrigins {
288-
&self.var_origins
292+
pub fn num_region_vars(&self) -> usize {
293+
self.var_infos.len()
289294
}
290295

291296
pub fn region_constraint_data(&self) -> &RegionConstraintData<'tcx> {
@@ -295,9 +300,9 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
295300
/// Once all the constraints have been gathered, extract out the final data.
296301
///
297302
/// Not legal during a snapshot.
298-
pub fn into_origins_and_data(self) -> (VarOrigins, RegionConstraintData<'tcx>) {
303+
pub fn into_infos_and_data(self) -> (VarInfos, RegionConstraintData<'tcx>) {
299304
assert!(!self.in_snapshot());
300-
(self.var_origins, self.data)
305+
(self.var_infos, self.data)
301306
}
302307

303308
/// Takes (and clears) the current set of constraints. Note that
@@ -319,7 +324,7 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
319324
// should think carefully about whether it needs to be cleared
320325
// or updated in some way.
321326
let RegionConstraintCollector {
322-
var_origins,
327+
var_infos,
323328
data,
324329
lubs,
325330
glbs,
@@ -343,7 +348,7 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
343348
// also insert `a <= b` and a `b <= a` edges, so the
344349
// `RegionConstraintData` contains the relationship here.
345350
*unification_table = ut::UnificationTable::new();
346-
for vid in var_origins.indices() {
351+
for vid in var_infos.indices() {
347352
unification_table.new_key(unify_key::RegionVidKey { min_vid: vid });
348353
}
349354

@@ -411,8 +416,8 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
411416
// nothing to do here
412417
}
413418
AddVar(vid) => {
414-
self.var_origins.pop().unwrap();
415-
assert_eq!(self.var_origins.len(), vid.index() as usize);
419+
self.var_infos.pop().unwrap();
420+
assert_eq!(self.var_infos.len(), vid.index() as usize);
416421
}
417422
AddConstraint(ref constraint) => {
418423
self.data.constraints.remove(constraint);
@@ -434,7 +439,9 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
434439
}
435440

436441
pub fn new_region_var(&mut self, origin: RegionVariableOrigin) -> RegionVid {
437-
let vid = self.var_origins.push(origin.clone());
442+
let vid = self.var_infos.push(RegionVariableInfo {
443+
origin,
444+
});
438445

439446
let u_vid = self.unification_table
440447
.new_key(unify_key::RegionVidKey { min_vid: vid });
@@ -452,7 +459,7 @@ impl<'tcx> RegionConstraintCollector<'tcx> {
452459

453460
/// Returns the origin for the given variable.
454461
pub fn var_origin(&self, vid: RegionVid) -> RegionVariableOrigin {
455-
self.var_origins[vid].clone()
462+
self.var_infos[vid].origin
456463
}
457464

458465
/// Creates a new skolemized region. Skolemized regions are fresh

src/librustc_mir/borrow_check/nll/region_infer/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use rustc::infer::RegionObligation;
1616
use rustc::infer::RegionVariableOrigin;
1717
use rustc::infer::SubregionOrigin;
1818
use rustc::infer::error_reporting::nice_region_error::NiceRegionError;
19-
use rustc::infer::region_constraints::{GenericKind, VarOrigins};
19+
use rustc::infer::region_constraints::{GenericKind, VarInfos};
2020
use rustc::mir::{ClosureOutlivesRequirement, ClosureOutlivesSubject, ClosureRegionRequirements,
2121
Local, Location, Mir};
2222
use rustc::traits::ObligationCause;
@@ -256,19 +256,19 @@ impl<'tcx> RegionInferenceContext<'tcx> {
256256
/// of those will be constant regions representing the free
257257
/// regions defined in `universal_regions`.
258258
pub(crate) fn new(
259-
var_origins: VarOrigins,
259+
var_infos: VarInfos,
260260
universal_regions: UniversalRegions<'tcx>,
261261
mir: &Mir<'tcx>,
262262
) -> Self {
263-
let num_region_variables = var_origins.len();
263+
let num_region_variables = var_infos.len();
264264
let num_universal_regions = universal_regions.len();
265265

266266
let elements = &Rc::new(RegionValueElements::new(mir, num_universal_regions));
267267

268268
// Create a RegionDefinition for each inference variable.
269-
let definitions = var_origins
269+
let definitions = var_infos
270270
.into_iter()
271-
.map(|origin| RegionDefinition::new(origin))
271+
.map(|info| RegionDefinition::new(info.origin))
272272
.collect();
273273

274274
let mut result = Self {

0 commit comments

Comments
 (0)