diff options
| author | Eh2406 <YeomanYaacov@gmail.com> | 2018-06-27 14:50:55 -0400 |
|---|---|---|
| committer | Eh2406 <YeomanYaacov@gmail.com> | 2018-06-28 10:15:37 -0400 |
| commit | 0119669711af204d1205cf64fed11f5ad3c1bbdd (patch) | |
| tree | 59dbb209dc225b1d290c3623e8ab79e9b53d27e8 | |
| parent | 8a356011aeae6895e4d89dd95b37e8c7706ec5a3 (diff) | |
| download | rust-0119669711af204d1205cf64fed11f5ad3c1bbdd.tar.gz rust-0119669711af204d1205cf64fed11f5ad3c1bbdd.zip | |
use retain to avoid the allocation
| -rw-r--r-- | src/librustc_mir/borrow_check/nll/region_infer/mod.rs | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/librustc_mir/borrow_check/nll/region_infer/mod.rs b/src/librustc_mir/borrow_check/nll/region_infer/mod.rs index f6d5de63f17..624636652f3 100644 --- a/src/librustc_mir/borrow_check/nll/region_infer/mod.rs +++ b/src/librustc_mir/borrow_check/nll/region_infer/mod.rs @@ -251,7 +251,7 @@ impl<'tcx> RegionInferenceContext<'tcx> { var_infos: VarInfos, universal_regions: UniversalRegions<'tcx>, mir: &Mir<'tcx>, - outlives_constraints: Vec<OutlivesConstraint>, + mut outlives_constraints: Vec<OutlivesConstraint>, type_tests: Vec<TypeTest<'tcx>>, ) -> Self { // The `next` field should not yet have been initialized: @@ -268,22 +268,22 @@ impl<'tcx> RegionInferenceContext<'tcx> { .map(|info| RegionDefinition::new(info.origin)) .collect(); + let mut seen_constraints: FxHashSet<(RegionVid, RegionVid)> = Default::default(); + + outlives_constraints.retain(|c| c.sup != c.sub && seen_constraints.insert(c.dedup_key())); + let mut result = Self { definitions, elements: elements.clone(), liveness_constraints: RegionValues::new(elements, num_region_variables), inferred_values: None, dependency_map: None, - constraints: Default::default(), - seen_constraints: Default::default(), + constraints: IndexVec::from_raw(outlives_constraints), + seen_constraints, type_tests, universal_regions, }; - for c in outlives_constraints { - result.add_outlives_iner(c); - } - result.init_universal_regions(); result |
