@@ -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