@@ -505,7 +505,9 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
505505 self . is_in_fn_syntax = true ;
506506 let lifetime_span: Option < Span > =
507507 c. generic_params . iter ( ) . rev ( ) . find_map ( |param| match param. kind {
508- GenericParamKind :: Lifetime { .. } => Some ( param. span ) ,
508+ GenericParamKind :: Lifetime { .. } => {
509+ Some ( self . tcx . hir ( ) . span ( param. hir_id ) )
510+ }
509511 _ => None ,
510512 } ) ;
511513 let ( span, span_type) = if let Some ( span) = lifetime_span {
@@ -1073,8 +1075,9 @@ fn shadower_label(span: Span) -> Shadower {
10731075fn original_lifetime ( span : Span ) -> Original {
10741076 Original { kind : ShadowKind :: Lifetime , span }
10751077}
1076- fn shadower_lifetime ( param : & hir:: GenericParam < ' _ > ) -> Shadower {
1077- Shadower { kind : ShadowKind :: Lifetime , span : param. span }
1078+ fn shadower_lifetime ( tcx : TyCtxt < ' _ > , param : & hir:: GenericParam < ' _ > ) -> Shadower {
1079+ let span = tcx. hir ( ) . span ( param. hir_id ) ;
1080+ Shadower { kind : ShadowKind :: Lifetime , span }
10781081}
10791082
10801083impl ShadowKind {
@@ -1090,7 +1093,7 @@ fn check_mixed_explicit_and_in_band_defs(tcx: TyCtxt<'_>, params: &[hir::Generic
10901093 let lifetime_params: Vec < _ > = params
10911094 . iter ( )
10921095 . filter_map ( |param| match param. kind {
1093- GenericParamKind :: Lifetime { kind, .. } => Some ( ( kind, param . span ) ) ,
1096+ GenericParamKind :: Lifetime { kind, .. } => Some ( ( kind, tcx . hir ( ) . span ( param . hir_id ) ) ) ,
10941097 _ => None ,
10951098 } )
10961099 . collect ( ) ;
@@ -1415,18 +1418,21 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
14151418 param. kind,
14161419 hir:: GenericParamKind :: Lifetime { kind: hir:: LifetimeParamKind :: InBand }
14171420 ) ;
1421+ let param_span = self . tcx . hir ( ) . span ( param. hir_id ) ;
14181422 if in_band {
1419- Some ( param . span )
1423+ Some ( param_span )
14201424 } else if generics. params . len ( ) == 1 {
14211425 // if sole lifetime, remove the entire `<>` brackets
14221426 Some ( generics. span )
14231427 } else {
14241428 // if removing within `<>` brackets, we also want to
14251429 // delete a leading or trailing comma as appropriate
14261430 if i >= generics. params . len ( ) - 1 {
1427- Some ( generics. params [ i - 1 ] . span . shrink_to_hi ( ) . to ( param. span ) )
1431+ let generic_span = self . tcx . hir ( ) . span ( generics. params [ i - 1 ] . hir_id ) ;
1432+ Some ( generic_span. shrink_to_hi ( ) . to ( param_span) )
14281433 } else {
1429- Some ( param. span . to ( generics. params [ i + 1 ] . span . shrink_to_lo ( ) ) )
1434+ let generic_span = self . tcx . hir ( ) . span ( generics. params [ i + 1 ] . hir_id ) ;
1435+ Some ( param_span. to ( generic_span. shrink_to_lo ( ) ) )
14301436 }
14311437 }
14321438 } else {
@@ -1583,7 +1589,8 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
15831589 hir_lifetime. name . ident ( ) ,
15841590 ) ) ,
15851591 Node :: GenericParam ( param) => {
1586- Some ( ( param. hir_id , param. span , param. name . ident ( ) ) )
1592+ let span = self . tcx . hir ( ) . span ( param. hir_id ) ;
1593+ Some ( ( param. hir_id , span, param. name . ident ( ) ) )
15871594 }
15881595 _ => None ,
15891596 } {
@@ -1640,7 +1647,8 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
16401647 hir_lifetime. name . ident ( ) ,
16411648 ) ) ,
16421649 Node :: GenericParam ( param) => {
1643- Some ( ( param. hir_id , param. span , param. name . ident ( ) ) )
1650+ let span = self . tcx . hir ( ) . span ( param. hir_id ) ;
1651+ Some ( ( param. hir_id , span, param. name . ident ( ) ) )
16441652 }
16451653 _ => None ,
16461654 } {
@@ -2580,33 +2588,33 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
25802588 if let hir:: ParamName :: Plain ( _) = lifetime_i_name {
25812589 let name = lifetime_i_name. ident ( ) . name ;
25822590 if name == kw:: UnderscoreLifetime || name == kw:: StaticLifetime {
2591+ let span_i = self . tcx . hir ( ) . span ( lifetime_i. hir_id ) ;
25832592 let mut err = struct_span_err ! (
25842593 self . tcx. sess,
2585- lifetime_i . span ,
2594+ span_i ,
25862595 E0262 ,
25872596 "invalid lifetime parameter name: `{}`" ,
25882597 lifetime_i. name. ident( ) ,
25892598 ) ;
2590- err. span_label (
2591- lifetime_i. span ,
2592- format ! ( "{} is a reserved lifetime name" , name) ,
2593- ) ;
2599+ err. span_label ( span_i, format ! ( "{} is a reserved lifetime name" , name) ) ;
25942600 err. emit ( ) ;
25952601 }
25962602 }
25972603
25982604 // It is a hard error to shadow a lifetime within the same scope.
25992605 for ( lifetime_j, lifetime_j_name) in lifetimes. iter ( ) . skip ( i + 1 ) {
26002606 if lifetime_i_name == lifetime_j_name {
2607+ let span_i = self . tcx . hir ( ) . span ( lifetime_i. hir_id ) ;
2608+ let span_j = self . tcx . hir ( ) . span ( lifetime_j. hir_id ) ;
26012609 struct_span_err ! (
26022610 self . tcx. sess,
2603- lifetime_j . span ,
2611+ span_j ,
26042612 E0263 ,
26052613 "lifetime name `{}` declared twice in the same scope" ,
26062614 lifetime_j. name. ident( )
26072615 )
2608- . span_label ( lifetime_j . span , "declared twice" )
2609- . span_label ( lifetime_i . span , "previous declaration here" )
2616+ . span_label ( span_j , "declared twice" )
2617+ . span_label ( span_i , "previous declaration here" )
26102618 . emit ( ) ;
26112619 }
26122620 }
@@ -2623,10 +2631,11 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
26232631 ) ,
26242632 hir:: LifetimeName :: Static => {
26252633 self . insert_lifetime ( lt, Region :: Static ) ;
2634+ let span_i = self . tcx . hir ( ) . span ( lifetime_i. hir_id ) ;
26262635 self . tcx
26272636 . sess
26282637 . struct_span_warn (
2629- lifetime_i . span . to ( lt. span ) ,
2638+ span_i . to ( lt. span ) ,
26302639 & format ! (
26312640 "unnecessary lifetime parameter `{}`" ,
26322641 lifetime_i. name. ident( ) ,
@@ -2670,7 +2679,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
26702679 self . tcx ,
26712680 label. name ,
26722681 original_label ( label. span ) ,
2673- shadower_lifetime ( & param) ,
2682+ shadower_lifetime ( self . tcx , & param) ,
26742683 ) ;
26752684 return ;
26762685 }
@@ -2697,7 +2706,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
26972706 self . tcx ,
26982707 param. name . ident ( ) . name ,
26992708 original_lifetime ( self . tcx . hir ( ) . span ( hir_id) ) ,
2700- shadower_lifetime ( & param) ,
2709+ shadower_lifetime ( self . tcx , & param) ,
27012710 ) ;
27022711 return ;
27032712 }
0 commit comments