Skip to content

Commit a7f6095

Browse files
committed
Skip late-bound lifetimes when crossing an AnonConst.
1 parent 45d4465 commit a7f6095

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

compiler/rustc_hir_analysis/src/collect/resolve_bound_vars.rs

+12-2
Original file line numberDiff line numberDiff line change
@@ -573,11 +573,17 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
573573
// give, we will reverse the IndexMap after early captures.
574574
let mut late_depth = 0;
575575
let mut scope = self.scope;
576+
let mut crossed_late_boundary = None;
576577
let mut opaque_capture_scopes = vec![(opaque.def_id, &captures)];
577578
loop {
578579
match *scope {
579580
Scope::Binder { ref bound_vars, scope_type, s, .. } => {
580581
for (&original_lifetime, &def) in bound_vars.iter().rev() {
582+
if let ResolvedArg::LateBound(..) = def
583+
&& crossed_late_boundary.is_some()
584+
{
585+
continue;
586+
}
581587
if let DefKind::LifetimeParam = self.tcx.def_kind(original_lifetime) {
582588
let def = def.shifted(late_depth);
583589
let ident = lifetime_ident(original_lifetime);
@@ -618,8 +624,12 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
618624

619625
Scope::ObjectLifetimeDefault { s, .. }
620626
| Scope::Supertrait { s, .. }
621-
| Scope::TraitRefBoundary { s, .. }
622-
| Scope::LateBoundary { s, .. } => {
627+
| Scope::TraitRefBoundary { s, .. } => {
628+
scope = s;
629+
}
630+
631+
Scope::LateBoundary { s, what, .. } => {
632+
crossed_late_boundary = Some(what);
623633
scope = s;
624634
}
625635
}

0 commit comments

Comments
 (0)