about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEh2406 <YeomanYaacov@gmail.com>2018-06-27 14:50:55 -0400
committerEh2406 <YeomanYaacov@gmail.com>2018-06-28 10:15:37 -0400
commit0119669711af204d1205cf64fed11f5ad3c1bbdd (patch)
tree59dbb209dc225b1d290c3623e8ab79e9b53d27e8
parent8a356011aeae6895e4d89dd95b37e8c7706ec5a3 (diff)
downloadrust-0119669711af204d1205cf64fed11f5ad3c1bbdd.tar.gz
rust-0119669711af204d1205cf64fed11f5ad3c1bbdd.zip
use retain to avoid the allocation
-rw-r--r--src/librustc_mir/borrow_check/nll/region_infer/mod.rs14
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