Skip to content

Commit 0119669

Browse files
committed
use retain to avoid the allocation
1 parent 8a35601 commit 0119669

File tree

1 file changed

+7
-7
lines changed
  • src/librustc_mir/borrow_check/nll/region_infer

1 file changed

+7
-7
lines changed

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
251251
var_infos: VarInfos,
252252
universal_regions: UniversalRegions<'tcx>,
253253
mir: &Mir<'tcx>,
254-
outlives_constraints: Vec<OutlivesConstraint>,
254+
mut outlives_constraints: Vec<OutlivesConstraint>,
255255
type_tests: Vec<TypeTest<'tcx>>,
256256
) -> Self {
257257
// The `next` field should not yet have been initialized:
@@ -268,22 +268,22 @@ impl<'tcx> RegionInferenceContext<'tcx> {
268268
.map(|info| RegionDefinition::new(info.origin))
269269
.collect();
270270

271+
let mut seen_constraints: FxHashSet<(RegionVid, RegionVid)> = Default::default();
272+
273+
outlives_constraints.retain(|c| c.sup != c.sub && seen_constraints.insert(c.dedup_key()));
274+
271275
let mut result = Self {
272276
definitions,
273277
elements: elements.clone(),
274278
liveness_constraints: RegionValues::new(elements, num_region_variables),
275279
inferred_values: None,
276280
dependency_map: None,
277-
constraints: Default::default(),
278-
seen_constraints: Default::default(),
281+
constraints: IndexVec::from_raw(outlives_constraints),
282+
seen_constraints,
279283
type_tests,
280284
universal_regions,
281285
};
282286

283-
for c in outlives_constraints {
284-
result.add_outlives_iner(c);
285-
}
286-
287287
result.init_universal_regions();
288288

289289
result

0 commit comments

Comments
 (0)