Skip to content

Commit

Permalink
region-outlives propagation (#2169)
Browse files Browse the repository at this point in the history
* region-outlives propagation

* woops

* gamer
  • Loading branch information
lcnr authored Dec 23, 2024
1 parent 5f164d8 commit 37565a8
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/borrow_check/region_inference/closure_constraints.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ While borrow-checking a closure inside of `RegionInferenceContext::solve` we sep

### Region-outlive constraints

If we fail to prove a region-outlives constraint, we try to propagate it in `fn try_propagate_universal_region_error`.
If `RegionInferenceContext::check_universal_regions` fails to prove some outlives constraint `'longer_fr: 'shorter_fr`, we try to propagate it in `fn try_propagate_universal_region_error`. Both these universal regions are either local to the closure or an external region.

In case `'longer_fr` is a local universal region, we search for the largest external region `'fr_minus` which is outlived by `'longer_fr`, i.e. `'longer_fr: 'fr_minus`. In case there are multiple such regions, we pick the `mutual_immediate_postdominator`: the fixpoint of repeatedly computing the GLB of all GLBs, see [TransitiveRelation::postdom_upper_bound](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_data_structures/transitive_relation/struct.TransitiveRelation.html#method.postdom_upper_bound) for more details.

If `'fr_minus` exists we require it to outlive all non-local upper bounds of `'shorter_fr`. There will always be at least one non-local upper bound `'static`.

### Type-outlive constraints

Expand Down

0 comments on commit 37565a8

Please sign in to comment.