@@ -10,7 +10,7 @@ use rustc_middle::span_bug;
10
10
use rustc_session:: errors:: report_lit_error;
11
11
use rustc_span:: source_map:: { Spanned , respan} ;
12
12
use rustc_span:: symbol:: { Ident , Symbol , kw, sym} ;
13
- use rustc_span:: { DUMMY_SP , DesugaringKind , Span } ;
13
+ use rustc_span:: { DesugaringKind , Span } ;
14
14
use thin_vec:: { ThinVec , thin_vec} ;
15
15
16
16
use super :: errors:: {
@@ -196,7 +196,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
196
196
MatchKind :: Postfix => hir:: MatchSource :: Postfix ,
197
197
} ,
198
198
) ,
199
- ExprKind :: Await ( expr, await_kw_span) => self . lower_expr_await ( * await_kw_span, expr) ,
199
+ ExprKind :: Await ( expr, await_kw_span) => {
200
+ self . lower_expr_await ( * await_kw_span, e. span , expr)
201
+ }
200
202
ExprKind :: Closure ( box Closure {
201
203
binder,
202
204
capture_clause,
@@ -262,9 +264,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
262
264
ExprKind :: Field ( el, ident) => {
263
265
hir:: ExprKind :: Field ( self . lower_expr ( el) , self . lower_ident ( * ident) )
264
266
}
265
- ExprKind :: Index ( el, er, brackets_span) => {
266
- hir:: ExprKind :: Index ( self . lower_expr ( el) , self . lower_expr ( er) , * brackets_span)
267
- }
267
+ ExprKind :: Index ( el, er, brackets_span) => hir:: ExprKind :: Index (
268
+ self . lower_expr ( el) ,
269
+ self . lower_expr ( er) ,
270
+ self . lower_span ( * brackets_span) ,
271
+ ) ,
268
272
ExprKind :: Range ( Some ( e1) , Some ( e2) , RangeLimits :: Closed ) => {
269
273
self . lower_expr_range_closed ( e. span , e1, e2)
270
274
}
@@ -405,7 +409,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
405
409
let last_segment = path. segments . last_mut ( ) . unwrap ( ) ;
406
410
assert ! ( last_segment. args. is_none( ) ) ;
407
411
last_segment. args = Some ( AstP ( GenericArgs :: AngleBracketed ( AngleBracketedArgs {
408
- span : DUMMY_SP ,
412
+ span : last_segment . span ( ) . shrink_to_hi ( ) ,
409
413
args : generic_args,
410
414
} ) ) ) ;
411
415
@@ -753,20 +757,24 @@ impl<'hir> LoweringContext<'_, 'hir> {
753
757
/// }
754
758
/// }
755
759
/// ```
756
- fn lower_expr_await ( & mut self , await_kw_span : Span , expr : & Expr ) -> hir:: ExprKind < ' hir > {
760
+ fn lower_expr_await (
761
+ & mut self ,
762
+ await_kw_span : Span ,
763
+ full_span : Span ,
764
+ expr : & Expr ,
765
+ ) -> hir:: ExprKind < ' hir > {
757
766
let expr = self . arena . alloc ( self . lower_expr_mut ( expr) ) ;
758
- self . make_lowered_await ( await_kw_span, expr, FutureKind :: Future )
767
+ self . make_lowered_await ( await_kw_span, full_span , expr, FutureKind :: Future )
759
768
}
760
769
761
770
/// Takes an expr that has already been lowered and generates a desugared await loop around it
762
771
fn make_lowered_await (
763
772
& mut self ,
764
773
await_kw_span : Span ,
774
+ full_span : Span ,
765
775
expr : & ' hir hir:: Expr < ' hir > ,
766
776
await_kind : FutureKind ,
767
777
) -> hir:: ExprKind < ' hir > {
768
- let full_span = expr. span . to ( await_kw_span) ;
769
-
770
778
let is_async_gen = match self . coroutine_kind {
771
779
Some ( hir:: CoroutineKind :: Desugared ( hir:: CoroutineDesugaring :: Async , _) ) => false ,
772
780
Some ( hir:: CoroutineKind :: Desugared ( hir:: CoroutineDesugaring :: AsyncGen , _) ) => true ,
@@ -1706,7 +1714,12 @@ impl<'hir> LoweringContext<'_, 'hir> {
1706
1714
) ) ;
1707
1715
// `unsafe { ... }`
1708
1716
let iter = self . arena . alloc ( self . expr_unsafe ( iter) ) ;
1709
- let kind = self . make_lowered_await ( head_span, iter, FutureKind :: AsyncIterator ) ;
1717
+ let kind = self . make_lowered_await (
1718
+ head_span,
1719
+ head_span,
1720
+ iter,
1721
+ FutureKind :: AsyncIterator ,
1722
+ ) ;
1710
1723
self . arena . alloc ( hir:: Expr { hir_id : self . next_id ( ) , kind, span : head_span } )
1711
1724
}
1712
1725
} ;
@@ -2012,6 +2025,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
2012
2025
}
2013
2026
2014
2027
pub ( super ) fn expr_str ( & mut self , sp : Span , value : Symbol ) -> hir:: Expr < ' hir > {
2028
+ let sp = self . lower_span ( sp) ;
2015
2029
let lit = self
2016
2030
. arena
2017
2031
. alloc ( hir:: Lit { span : sp, node : ast:: LitKind :: Str ( value, ast:: StrStyle :: Cooked ) } ) ;
0 commit comments