Skip to content

Commit 6f71cab

Browse files
committed
Normalize regions before comparing them for member constraints
1 parent 5115069 commit 6f71cab

File tree

1 file changed

+17
-7
lines changed
  • compiler/rustc_infer/src/infer/lexical_region_resolve

1 file changed

+17
-7
lines changed

compiler/rustc_infer/src/infer/lexical_region_resolve/mod.rs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,23 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
297297
// Get an iterator over the *available choice* -- that is,
298298
// each choice region `c` where `lb <= c` and `c <= ub` for all the
299299
// upper bounds `ub`.
300-
debug!("enforce_member_constraint: upper_bounds={:#?}", member_upper_bounds);
301-
let mut options = member_constraint.choice_regions.iter().filter(|option| {
302-
self.sub_concrete_regions(member_lower_bound, option)
303-
&& member_upper_bounds
304-
.iter()
305-
.all(|upper_bound| self.sub_concrete_regions(option, upper_bound.region))
306-
});
300+
debug!("upper_bounds={:#?}", member_upper_bounds);
301+
let mut options = member_constraint
302+
.choice_regions
303+
.iter()
304+
.filter_map(|option| match option {
305+
ty::ReVar(vid) => match var_values.value(*vid) {
306+
VarValue::ErrorValue => None,
307+
VarValue::Value(r) => Some(r),
308+
},
309+
r => Some(r),
310+
})
311+
.filter(|option| {
312+
self.sub_concrete_regions(member_lower_bound, option)
313+
&& member_upper_bounds
314+
.iter()
315+
.all(|upper_bound| self.sub_concrete_regions(option, upper_bound.region))
316+
});
307317

308318
// If there is more than one option, we only make a choice if
309319
// there is a single *least* choice -- i.e., some available

0 commit comments

Comments
 (0)