@@ -481,7 +481,9 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
481481 self . is_in_fn_syntax = true ;
482482 let lifetime_span: Option < Span > =
483483 c. generic_params . iter ( ) . rev ( ) . find_map ( |param| match param. kind {
484- GenericParamKind :: Lifetime { .. } => Some ( param. span ) ,
484+ GenericParamKind :: Lifetime { .. } => {
485+ Some ( self . tcx . hir ( ) . span ( param. hir_id ) )
486+ }
485487 _ => None ,
486488 } ) ;
487489 let ( span, span_type) = if let Some ( span) = lifetime_span {
@@ -1004,8 +1006,9 @@ fn shadower_label(span: Span) -> Shadower {
10041006fn original_lifetime ( span : Span ) -> Original {
10051007 Original { kind : ShadowKind :: Lifetime , span }
10061008}
1007- fn shadower_lifetime ( param : & hir:: GenericParam < ' _ > ) -> Shadower {
1008- Shadower { kind : ShadowKind :: Lifetime , span : param. span }
1009+ fn shadower_lifetime ( tcx : TyCtxt < ' _ > , param : & hir:: GenericParam < ' _ > ) -> Shadower {
1010+ let span = tcx. hir ( ) . span ( param. hir_id ) ;
1011+ Shadower { kind : ShadowKind :: Lifetime , span }
10091012}
10101013
10111014impl ShadowKind {
@@ -1021,7 +1024,7 @@ fn check_mixed_explicit_and_in_band_defs(tcx: TyCtxt<'_>, params: &[hir::Generic
10211024 let lifetime_params: Vec < _ > = params
10221025 . iter ( )
10231026 . filter_map ( |param| match param. kind {
1024- GenericParamKind :: Lifetime { kind, .. } => Some ( ( kind, param . span ) ) ,
1027+ GenericParamKind :: Lifetime { kind, .. } => Some ( ( kind, tcx . hir ( ) . span ( param . hir_id ) ) ) ,
10251028 _ => None ,
10261029 } )
10271030 . collect ( ) ;
@@ -1342,8 +1345,9 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
13421345 in_band = true ;
13431346 }
13441347 }
1348+ let param_span = self . tcx . hir ( ) . span ( param. hir_id ) ;
13451349 if in_band {
1346- Some ( param . span )
1350+ Some ( param_span )
13471351 } else {
13481352 if generics. params . len ( ) == 1 {
13491353 // if sole lifetime, remove the entire `<>` brackets
@@ -1352,9 +1356,11 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
13521356 // if removing within `<>` brackets, we also want to
13531357 // delete a leading or trailing comma as appropriate
13541358 if i >= generics. params . len ( ) - 1 {
1355- Some ( generics. params [ i - 1 ] . span . shrink_to_hi ( ) . to ( param. span ) )
1359+ let other_span = self . tcx . hir ( ) . span ( generics. params [ i - 1 ] . hir_id ) ;
1360+ Some ( other_span. shrink_to_hi ( ) . to ( param_span) )
13561361 } else {
1357- Some ( param. span . to ( generics. params [ i + 1 ] . span . shrink_to_lo ( ) ) )
1362+ let other_span = self . tcx . hir ( ) . span ( generics. params [ i + 1 ] . hir_id ) ;
1363+ Some ( param_span. to ( other_span. shrink_to_lo ( ) ) )
13581364 }
13591365 }
13601366 }
@@ -1513,7 +1519,8 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
15131519 hir_lifetime. name . ident ( ) ,
15141520 ) ) ,
15151521 Node :: GenericParam ( param) => {
1516- Some ( ( param. hir_id , param. span , param. name . ident ( ) ) )
1522+ let span = self . tcx . hir ( ) . span ( param. hir_id ) ;
1523+ Some ( ( param. hir_id , span, param. name . ident ( ) ) )
15171524 }
15181525 _ => None ,
15191526 } {
@@ -1574,7 +1581,8 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
15741581 hir_lifetime. name . ident ( ) ,
15751582 ) ) ,
15761583 Node :: GenericParam ( param) => {
1577- Some ( ( param. hir_id , param. span , param. name . ident ( ) ) )
1584+ let span = self . tcx . hir ( ) . span ( param. hir_id ) ;
1585+ Some ( ( param. hir_id , span, param. name . ident ( ) ) )
15781586 }
15791587 _ => None ,
15801588 } {
@@ -2494,33 +2502,33 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
24942502 if let hir:: ParamName :: Plain ( _) = lifetime_i_name {
24952503 let name = lifetime_i_name. ident ( ) . name ;
24962504 if name == kw:: UnderscoreLifetime || name == kw:: StaticLifetime {
2505+ let span_i = self . tcx . hir ( ) . span ( lifetime_i. hir_id ) ;
24972506 let mut err = struct_span_err ! (
24982507 self . tcx. sess,
2499- lifetime_i . span ,
2508+ span_i ,
25002509 E0262 ,
25012510 "invalid lifetime parameter name: `{}`" ,
25022511 lifetime_i. name. ident( ) ,
25032512 ) ;
2504- err. span_label (
2505- lifetime_i. span ,
2506- format ! ( "{} is a reserved lifetime name" , name) ,
2507- ) ;
2513+ err. span_label ( span_i, format ! ( "{} is a reserved lifetime name" , name) ) ;
25082514 err. emit ( ) ;
25092515 }
25102516 }
25112517
25122518 // It is a hard error to shadow a lifetime within the same scope.
25132519 for ( lifetime_j, lifetime_j_name) in lifetimes. iter ( ) . skip ( i + 1 ) {
25142520 if lifetime_i_name == lifetime_j_name {
2521+ let span_i = self . tcx . hir ( ) . span ( lifetime_i. hir_id ) ;
2522+ let span_j = self . tcx . hir ( ) . span ( lifetime_j. hir_id ) ;
25152523 struct_span_err ! (
25162524 self . tcx. sess,
2517- lifetime_j . span ,
2525+ span_j ,
25182526 E0263 ,
25192527 "lifetime name `{}` declared twice in the same scope" ,
25202528 lifetime_j. name. ident( )
25212529 )
2522- . span_label ( lifetime_j . span , "declared twice" )
2523- . span_label ( lifetime_i . span , "previous declaration here" )
2530+ . span_label ( span_j , "declared twice" )
2531+ . span_label ( span_i , "previous declaration here" )
25242532 . emit ( ) ;
25252533 }
25262534 }
@@ -2537,10 +2545,11 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
25372545 ) ,
25382546 hir:: LifetimeName :: Static => {
25392547 self . insert_lifetime ( lt, Region :: Static ) ;
2548+ let span_i = self . tcx . hir ( ) . span ( lifetime_i. hir_id ) ;
25402549 self . tcx
25412550 . sess
25422551 . struct_span_warn (
2543- lifetime_i . span . to ( lt. span ) ,
2552+ span_i . to ( lt. span ) ,
25442553 & format ! (
25452554 "unnecessary lifetime parameter `{}`" ,
25462555 lifetime_i. name. ident( ) ,
@@ -2584,7 +2593,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
25842593 self . tcx ,
25852594 label. name ,
25862595 original_label ( label. span ) ,
2587- shadower_lifetime ( & param) ,
2596+ shadower_lifetime ( self . tcx , & param) ,
25882597 ) ;
25892598 return ;
25902599 }
@@ -2611,7 +2620,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
26112620 self . tcx ,
26122621 param. name . ident ( ) . name ,
26132622 original_lifetime ( self . tcx . hir ( ) . span ( hir_id) ) ,
2614- shadower_lifetime ( & param) ,
2623+ shadower_lifetime ( self . tcx , & param) ,
26152624 ) ;
26162625 return ;
26172626 }
0 commit comments