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