1
Fork 0

use retain to avoid the allocation

This commit is contained in:
Eh2406 2018-06-27 14:50:55 -04:00
parent 8a356011ae
commit 0119669711

View file

@ -251,7 +251,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
var_infos: VarInfos, var_infos: VarInfos,
universal_regions: UniversalRegions<'tcx>, universal_regions: UniversalRegions<'tcx>,
mir: &Mir<'tcx>, mir: &Mir<'tcx>,
outlives_constraints: Vec<OutlivesConstraint>, mut outlives_constraints: Vec<OutlivesConstraint>,
type_tests: Vec<TypeTest<'tcx>>, type_tests: Vec<TypeTest<'tcx>>,
) -> Self { ) -> Self {
// The `next` field should not yet have been initialized: // The `next` field should not yet have been initialized:
@ -268,22 +268,22 @@ impl<'tcx> RegionInferenceContext<'tcx> {
.map(|info| RegionDefinition::new(info.origin)) .map(|info| RegionDefinition::new(info.origin))
.collect(); .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 { let mut result = Self {
definitions, definitions,
elements: elements.clone(), elements: elements.clone(),
liveness_constraints: RegionValues::new(elements, num_region_variables), liveness_constraints: RegionValues::new(elements, num_region_variables),
inferred_values: None, inferred_values: None,
dependency_map: None, dependency_map: None,
constraints: Default::default(), constraints: IndexVec::from_raw(outlives_constraints),
seen_constraints: Default::default(), seen_constraints,
type_tests, type_tests,
universal_regions, universal_regions,
}; };
for c in outlives_constraints {
result.add_outlives_iner(c);
}
result.init_universal_regions(); result.init_universal_regions();
result result