@@ -72,7 +72,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
7272 let kind = match & e. kind {
7373 ExprKind :: Array ( exprs) => hir:: ExprKind :: Array ( self . lower_exprs ( exprs) ) ,
7474 ExprKind :: ConstBlock ( c) => {
75- let c = self . with_new_scopes ( |this| hir:: ConstBlock {
75+ let c = self . with_new_scopes ( c . value . span , |this| hir:: ConstBlock {
7676 def_id : this. local_def_id ( c. id ) ,
7777 hir_id : this. lower_node_id ( c. id ) ,
7878 body : this. lower_const_body ( c. value . span , Some ( & c. value ) ) ,
@@ -189,7 +189,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
189189 None ,
190190 e. span ,
191191 hir:: CoroutineSource :: Block ,
192- |this| this. with_new_scopes ( |this| this. lower_block_expr ( block) ) ,
192+ |this| this. with_new_scopes ( e . span , |this| this. lower_block_expr ( block) ) ,
193193 ) ,
194194 ExprKind :: Await ( expr, await_kw_span) => self . lower_expr_await ( * await_kw_span, expr) ,
195195 ExprKind :: Closure ( box Closure {
@@ -323,7 +323,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
323323 None ,
324324 e. span ,
325325 hir:: CoroutineSource :: Block ,
326- |this| this. with_new_scopes ( |this| this. lower_block_expr ( block) ) ,
326+ |this| this. with_new_scopes ( e . span , |this| this. lower_block_expr ( block) ) ,
327327 ) ,
328328 ExprKind :: Yield ( opt_expr) => self . lower_expr_yield ( e. span , opt_expr. as_deref ( ) ) ,
329329 ExprKind :: Err => hir:: ExprKind :: Err (
@@ -350,30 +350,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
350350 }
351351 }
352352
353- fn lower_binop ( & mut self , b : BinOp ) -> hir:: BinOp {
354- Spanned {
355- node : match b. node {
356- BinOpKind :: Add => hir:: BinOpKind :: Add ,
357- BinOpKind :: Sub => hir:: BinOpKind :: Sub ,
358- BinOpKind :: Mul => hir:: BinOpKind :: Mul ,
359- BinOpKind :: Div => hir:: BinOpKind :: Div ,
360- BinOpKind :: Rem => hir:: BinOpKind :: Rem ,
361- BinOpKind :: And => hir:: BinOpKind :: And ,
362- BinOpKind :: Or => hir:: BinOpKind :: Or ,
363- BinOpKind :: BitXor => hir:: BinOpKind :: BitXor ,
364- BinOpKind :: BitAnd => hir:: BinOpKind :: BitAnd ,
365- BinOpKind :: BitOr => hir:: BinOpKind :: BitOr ,
366- BinOpKind :: Shl => hir:: BinOpKind :: Shl ,
367- BinOpKind :: Shr => hir:: BinOpKind :: Shr ,
368- BinOpKind :: Eq => hir:: BinOpKind :: Eq ,
369- BinOpKind :: Lt => hir:: BinOpKind :: Lt ,
370- BinOpKind :: Le => hir:: BinOpKind :: Le ,
371- BinOpKind :: Ne => hir:: BinOpKind :: Ne ,
372- BinOpKind :: Ge => hir:: BinOpKind :: Ge ,
373- BinOpKind :: Gt => hir:: BinOpKind :: Gt ,
374- } ,
375- span : self . lower_span ( b. span ) ,
376- }
353+ fn lower_binop ( & mut self , b : BinOp ) -> BinOp {
354+ Spanned { node : b. node , span : self . lower_span ( b. span ) }
377355 }
378356
379357 fn lower_legacy_const_generics (
@@ -778,10 +756,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
778756 match self . coroutine_kind {
779757 Some ( hir:: CoroutineKind :: Async ( _) ) => { }
780758 Some ( hir:: CoroutineKind :: Coroutine ) | Some ( hir:: CoroutineKind :: Gen ( _) ) | None => {
781- self . tcx . sess . emit_err ( AwaitOnlyInAsyncFnAndBlocks {
759+ return hir :: ExprKind :: Err ( self . tcx . sess . emit_err ( AwaitOnlyInAsyncFnAndBlocks {
782760 await_kw_span,
783761 item_span : self . current_item ,
784- } ) ;
762+ } ) ) ;
785763 }
786764 }
787765 let span = self . mark_span_with_reason ( DesugaringKind :: Await , await_kw_span, None ) ;
@@ -941,9 +919,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
941919 ) -> hir:: ExprKind < ' hir > {
942920 let ( binder_clause, generic_params) = self . lower_closure_binder ( binder) ;
943921
944- let ( body_id, coroutine_option) = self . with_new_scopes ( move |this| {
945- let prev = this. current_item ;
946- this. current_item = Some ( fn_decl_span) ;
922+ let ( body_id, coroutine_option) = self . with_new_scopes ( fn_decl_span, move |this| {
947923 let mut coroutine_kind = None ;
948924 let body_id = this. lower_fn_body ( decl, |this| {
949925 let e = this. lower_expr_mut ( body) ;
@@ -952,7 +928,6 @@ impl<'hir> LoweringContext<'_, 'hir> {
952928 } ) ;
953929 let coroutine_option =
954930 this. coroutine_movability_for_fn ( decl, fn_decl_span, coroutine_kind, movability) ;
955- this. current_item = prev;
956931 ( body_id, coroutine_option)
957932 } ) ;
958933
@@ -1038,7 +1013,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
10381013 let outer_decl =
10391014 FnDecl { inputs : decl. inputs . clone ( ) , output : FnRetTy :: Default ( fn_decl_span) } ;
10401015
1041- let body = self . with_new_scopes ( |this| {
1016+ let body = self . with_new_scopes ( fn_decl_span , |this| {
10421017 // FIXME(cramertj): allow `async` non-`move` closures with arguments.
10431018 if capture_clause == CaptureBy :: Ref && !decl. inputs . is_empty ( ) {
10441019 this. tcx . sess . emit_err ( AsyncNonMoveClosureNotSupported { fn_decl_span } ) ;
@@ -1060,7 +1035,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
10601035 async_ret_ty,
10611036 body. span ,
10621037 hir:: CoroutineSource :: Closure ,
1063- |this| this. with_new_scopes ( |this| this. lower_expr_mut ( body) ) ,
1038+ |this| this. with_new_scopes ( fn_decl_span , |this| this. lower_expr_mut ( body) ) ,
10641039 ) ;
10651040 let hir_id = this. lower_node_id ( inner_closure_id) ;
10661041 this. maybe_forward_track_caller ( body. span , closure_hir_id, hir_id) ;
@@ -1500,7 +1475,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
15001475 match self . coroutine_kind {
15011476 Some ( hir:: CoroutineKind :: Gen ( _) ) => { }
15021477 Some ( hir:: CoroutineKind :: Async ( _) ) => {
1503- self . tcx . sess . emit_err ( AsyncCoroutinesNotSupported { span } ) ;
1478+ return hir:: ExprKind :: Err (
1479+ self . tcx . sess . emit_err ( AsyncCoroutinesNotSupported { span } ) ,
1480+ ) ;
15041481 }
15051482 Some ( hir:: CoroutineKind :: Coroutine ) | None => {
15061483 if !self . tcx . features ( ) . coroutines {
0 commit comments