Skip to content

Commit d4a006e

Browse files
committed
consider a loan escapes the function if there are applied member constraints
1 parent c69bd94 commit d4a006e

File tree

2 files changed

+8
-11
lines changed

2 files changed

+8
-11
lines changed

compiler/rustc_borrowck/src/dataflow.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -277,15 +277,17 @@ impl<'tcx> PoloniusOutOfScopePrecomputer<'_, 'tcx> {
277277
// We first handle the cases where the loan doesn't go out of scope, depending on the issuing
278278
// region's successors.
279279
for scc in sccs.depth_first_search(issuing_region_scc) {
280-
// 1. Via member constraints
280+
// 1. Via applied member constraints
281281
//
282282
// The issuing region can flow into the choice regions, and they are either:
283283
// - placeholders or free regions themselves,
284284
// - or also transitively outlive a free region.
285285
//
286-
// That is to say, if there are member constraints here, the loan escapes the function
287-
// and cannot go out of scope. We can early return.
288-
if self.regioncx.scc_has_member_constraints(scc) {
286+
// That is to say, if there are applied member constraints here, the loan escapes the
287+
// function and cannot go out of scope. We can early return.
288+
let scc_has_applied_member_constraints =
289+
!self.regioncx.applied_member_constraints(scc).is_empty();
290+
if scc_has_applied_member_constraints {
289291
return;
290292
}
291293

@@ -413,12 +415,12 @@ impl<'a, 'tcx> Borrows<'a, 'tcx> {
413415
let mut polonius_prec = PoloniusOutOfScopePrecomputer::new(body, regioncx);
414416
for (loan_idx, loan_data) in borrow_set.iter_enumerated() {
415417
let issuing_region = loan_data.region;
416-
let issued_location = loan_data.reserve_location;
418+
let loan_issued_at = loan_data.reserve_location;
417419

418420
polonius_prec.precompute_loans_out_of_scope(
419421
loan_idx,
420422
issuing_region,
421-
issued_location,
423+
loan_issued_at,
422424
);
423425
}
424426

compiler/rustc_borrowck/src/region_infer/mod.rs

-5
Original file line numberDiff line numberDiff line change
@@ -2293,11 +2293,6 @@ impl<'tcx> RegionInferenceContext<'tcx> {
22932293
self.constraint_sccs.as_ref()
22942294
}
22952295

2296-
/// Returns whether the given SCC has any member constraints.
2297-
pub(crate) fn scc_has_member_constraints(&self, scc: ConstraintSccIndex) -> bool {
2298-
self.member_constraints.indices(scc).next().is_some()
2299-
}
2300-
23012296
/// Returns whether the given SCC is live at all points: whether the representative is a
23022297
/// placeholder or a free region.
23032298
pub(crate) fn scc_is_live_at_all_points(&self, scc: ConstraintSccIndex) -> bool {

0 commit comments

Comments
 (0)