@@ -13,7 +13,7 @@ use rustc_middle::span_bug;
13
13
use rustc_middle:: ty:: TyCtxt ;
14
14
use rustc_session:: errors:: report_lit_error;
15
15
use rustc_span:: source_map:: { Spanned , respan} ;
16
- use rustc_span:: { DUMMY_SP , DesugaringKind , Ident , Span , Symbol , sym} ;
16
+ use rustc_span:: { DesugaringKind , Ident , Span , Symbol , sym} ;
17
17
use thin_vec:: { ThinVec , thin_vec} ;
18
18
use visit:: { Visitor , walk_expr} ;
19
19
@@ -207,7 +207,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
207
207
MatchKind :: Postfix => hir:: MatchSource :: Postfix ,
208
208
} ,
209
209
) ,
210
- ExprKind :: Await ( expr, await_kw_span) => self . lower_expr_await ( * await_kw_span, expr) ,
210
+ ExprKind :: Await ( expr, await_kw_span) => {
211
+ self . lower_expr_await ( * await_kw_span, e. span , expr)
212
+ }
211
213
ExprKind :: Use ( expr, use_kw_span) => self . lower_expr_use ( * use_kw_span, expr) ,
212
214
ExprKind :: Closure ( box Closure {
213
215
binder,
@@ -513,7 +515,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
513
515
let last_segment = path. segments . last_mut ( ) . unwrap ( ) ;
514
516
assert ! ( last_segment. args. is_none( ) ) ;
515
517
last_segment. args = Some ( AstP ( GenericArgs :: AngleBracketed ( AngleBracketedArgs {
516
- span : DUMMY_SP ,
518
+ span : last_segment . span ( ) . shrink_to_hi ( ) ,
517
519
args : generic_args,
518
520
} ) ) ) ;
519
521
@@ -828,20 +830,24 @@ impl<'hir> LoweringContext<'_, 'hir> {
828
830
/// }
829
831
/// }
830
832
/// ```
831
- fn lower_expr_await ( & mut self , await_kw_span : Span , expr : & Expr ) -> hir:: ExprKind < ' hir > {
833
+ fn lower_expr_await (
834
+ & mut self ,
835
+ await_kw_span : Span ,
836
+ full_span : Span ,
837
+ expr : & Expr ,
838
+ ) -> hir:: ExprKind < ' hir > {
832
839
let expr = self . arena . alloc ( self . lower_expr_mut ( expr) ) ;
833
- self . make_lowered_await ( await_kw_span, expr, FutureKind :: Future )
840
+ self . make_lowered_await ( await_kw_span, full_span , expr, FutureKind :: Future )
834
841
}
835
842
836
843
/// Takes an expr that has already been lowered and generates a desugared await loop around it
837
844
fn make_lowered_await (
838
845
& mut self ,
839
846
await_kw_span : Span ,
847
+ full_span : Span ,
840
848
expr : & ' hir hir:: Expr < ' hir > ,
841
849
await_kind : FutureKind ,
842
850
) -> hir:: ExprKind < ' hir > {
843
- let full_span = expr. span . to ( await_kw_span) ;
844
-
845
851
let is_async_gen = match self . coroutine_kind {
846
852
Some ( hir:: CoroutineKind :: Desugared ( hir:: CoroutineDesugaring :: Async , _) ) => false ,
847
853
Some ( hir:: CoroutineKind :: Desugared ( hir:: CoroutineDesugaring :: AsyncGen , _) ) => true ,
@@ -1820,7 +1826,12 @@ impl<'hir> LoweringContext<'_, 'hir> {
1820
1826
) ) ;
1821
1827
// `unsafe { ... }`
1822
1828
let iter = self . arena . alloc ( self . expr_unsafe ( iter) ) ;
1823
- let kind = self . make_lowered_await ( head_span, iter, FutureKind :: AsyncIterator ) ;
1829
+ let kind = self . make_lowered_await (
1830
+ head_span,
1831
+ head_span,
1832
+ iter,
1833
+ FutureKind :: AsyncIterator ,
1834
+ ) ;
1824
1835
self . arena . alloc ( hir:: Expr { hir_id : self . next_id ( ) , kind, span : head_span } )
1825
1836
}
1826
1837
} ;
@@ -2120,6 +2131,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
2120
2131
}
2121
2132
2122
2133
pub ( super ) fn expr_str ( & mut self , sp : Span , value : Symbol ) -> hir:: Expr < ' hir > {
2134
+ let sp = self . lower_span ( sp) ;
2123
2135
let lit = hir:: Lit { span : sp, node : ast:: LitKind :: Str ( value, ast:: StrStyle :: Cooked ) } ;
2124
2136
self . expr ( sp, hir:: ExprKind :: Lit ( lit) )
2125
2137
}
0 commit comments