@@ -15,7 +15,7 @@ use rustc_hir::def::{DefKind, Res};
15
15
use rustc_hir:: def_id:: { DefIdMap , LocalDefId } ;
16
16
use rustc_hir:: intravisit:: { self , Visitor } ;
17
17
use rustc_hir:: { GenericArg , GenericParam , LifetimeName , Node } ;
18
- use rustc_hir:: { GenericParamKind , HirIdMap } ;
18
+ use rustc_hir:: { GenericParamKind , HirIdMap , LifetimeParamKind } ;
19
19
use rustc_middle:: hir:: map:: Map ;
20
20
use rustc_middle:: hir:: nested_filter;
21
21
use rustc_middle:: middle:: resolve_lifetime:: * ;
@@ -629,8 +629,6 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
629
629
} )
630
630
. unzip ( ) ;
631
631
632
- // FIXME: missing_named_lifetime_spots
633
-
634
632
self . map . late_bound_vars . insert ( e. hir_id , binders) ;
635
633
let scope = Scope :: Binder {
636
634
hir_id : e. hir_id ,
@@ -642,11 +640,41 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
642
640
allow_late_bound : true ,
643
641
where_bound_origin : None ,
644
642
} ;
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
+
645
669
self . with ( scope, |this| {
646
670
// a closure has no bounds, so everything
647
671
// contained within is scoped within its binder.
648
672
intravisit:: walk_expr ( this, e)
649
673
} ) ;
674
+
675
+ if let hir:: ClosureBinder :: For { .. } = binder {
676
+ self . missing_named_lifetime_spots . pop ( ) ;
677
+ }
650
678
} else {
651
679
intravisit:: walk_expr ( self , e)
652
680
}
0 commit comments