@@ -15,7 +15,7 @@ use rustc_hir::def::{DefKind, Res};
1515use rustc_hir:: def_id:: { DefIdMap , LocalDefId } ;
1616use rustc_hir:: intravisit:: { self , Visitor } ;
1717use rustc_hir:: { GenericArg , GenericParam , LifetimeName , Node } ;
18- use rustc_hir:: { GenericParamKind , HirIdMap } ;
18+ use rustc_hir:: { GenericParamKind , HirIdMap , LifetimeParamKind } ;
1919use rustc_middle:: hir:: map:: Map ;
2020use rustc_middle:: hir:: nested_filter;
2121use rustc_middle:: middle:: resolve_lifetime:: * ;
@@ -629,8 +629,6 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
629629 } )
630630 . unzip ( ) ;
631631
632- // FIXME: missing_named_lifetime_spots
633-
634632 self . map . late_bound_vars . insert ( e. hir_id , binders) ;
635633 let scope = Scope :: Binder {
636634 hir_id : e. hir_id ,
@@ -642,11 +640,41 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
642640 allow_late_bound : true ,
643641 where_bound_origin : None ,
644642 } ;
643+
644+ if let & hir:: ClosureBinder :: For { span, .. } = binder {
645+ let last_lt = bound_generic_params
646+ . iter ( )
647+ . filter ( |p| {
648+ matches ! (
649+ p,
650+ GenericParam {
651+ kind: GenericParamKind :: Lifetime {
652+ kind: LifetimeParamKind :: Explicit
653+ } ,
654+ ..
655+ }
656+ )
657+ } )
658+ . last ( ) ;
659+ let ( span, span_type) = match last_lt {
660+ Some ( GenericParam { span : last_sp, .. } ) => {
661+ ( last_sp. shrink_to_hi ( ) , ForLifetimeSpanType :: ClosureTail )
662+ }
663+ None => ( span, ForLifetimeSpanType :: ClosureEmpty ) ,
664+ } ;
665+ self . missing_named_lifetime_spots
666+ . push ( MissingLifetimeSpot :: HigherRanked { span, span_type } ) ;
667+ }
668+
645669 self . with ( scope, |this| {
646670 // a closure has no bounds, so everything
647671 // contained within is scoped within its binder.
648672 intravisit:: walk_expr ( this, e)
649673 } ) ;
674+
675+ if let hir:: ClosureBinder :: For { .. } = binder {
676+ self . missing_named_lifetime_spots . pop ( ) ;
677+ }
650678 } else {
651679 intravisit:: walk_expr ( self , e)
652680 }
0 commit comments