@@ -1332,15 +1332,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
13321332 body : & Block ,
13331333 opt_label : Option < Label > ,
13341334 ) -> hir:: Expr < ' hir > {
1335- let orig_head_span = head. span ;
13361335 // expand <head>
1337- let mut head = self . lower_expr_mut ( head) ;
1338- let desugared_span = self . mark_span_with_reason (
1339- DesugaringKind :: ForLoop ( ForLoopLoc :: Head ) ,
1340- orig_head_span,
1341- None ,
1342- ) ;
1343- head. span = self . lower_span ( desugared_span) ;
1336+ let head = self . lower_expr_mut ( head) ;
1337+ let desugared_span =
1338+ self . mark_span_with_reason ( DesugaringKind :: ForLoop ( ForLoopLoc :: Head ) , head. span , None ) ;
1339+ let e_span = self . lower_span ( e. span ) ;
13441340
13451341 let iter = Ident :: with_dummy_span ( sym:: iter) ;
13461342
@@ -1354,23 +1350,24 @@ impl<'hir> LoweringContext<'_, 'hir> {
13541350 // `::std::option::Option::Some(val) => __next = val`
13551351 let pat_arm = {
13561352 let val_ident = Ident :: with_dummy_span ( sym:: val) ;
1357- let ( val_pat, val_pat_hid) = self . pat_ident ( pat. span , val_ident) ;
1358- let val_expr = self . expr_ident ( pat. span , val_ident, val_pat_hid) ;
1359- let next_expr = self . expr_ident ( pat. span , next_ident, next_pat_hid) ;
1353+ let pat_span = self . lower_span ( pat. span ) ;
1354+ let ( val_pat, val_pat_hid) = self . pat_ident ( pat_span, val_ident) ;
1355+ let val_expr = self . expr_ident ( pat_span, val_ident, val_pat_hid) ;
1356+ let next_expr = self . expr_ident ( pat_span, next_ident, next_pat_hid) ;
13601357 let assign = self . arena . alloc ( self . expr (
1361- pat . span ,
1362- hir:: ExprKind :: Assign ( next_expr, val_expr, self . lower_span ( pat . span ) ) ,
1358+ pat_span ,
1359+ hir:: ExprKind :: Assign ( next_expr, val_expr, self . lower_span ( pat_span ) ) ,
13631360 ThinVec :: new ( ) ,
13641361 ) ) ;
1365- let some_pat = self . pat_some ( pat . span , val_pat) ;
1362+ let some_pat = self . pat_some ( pat_span , val_pat) ;
13661363 self . arm ( some_pat, assign)
13671364 } ;
13681365
13691366 // `::std::option::Option::None => break`
13701367 let break_arm = {
13711368 let break_expr =
1372- self . with_loop_scope ( e. id , |this| this. expr_break_alloc ( e . span , ThinVec :: new ( ) ) ) ;
1373- let pat = self . pat_none ( e . span ) ;
1369+ self . with_loop_scope ( e. id , |this| this. expr_break_alloc ( e_span , ThinVec :: new ( ) ) ) ;
1370+ let pat = self . pat_none ( e_span ) ;
13741371 self . arm ( pat, break_expr)
13751372 } ;
13761373
@@ -1416,10 +1413,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
14161413
14171414 let body_block = self . with_loop_scope ( e. id , |this| this. lower_block ( body, false ) ) ;
14181415 let body_expr = self . expr_block ( body_block, ThinVec :: new ( ) ) ;
1419- let body_stmt = self . stmt_expr ( body . span , body_expr) ;
1416+ let body_stmt = self . stmt_expr ( body_block . span , body_expr) ;
14201417
14211418 let loop_block = self . block_all (
1422- e . span ,
1419+ e_span ,
14231420 arena_vec ! [ self ; next_let, match_stmt, pat_let, body_stmt] ,
14241421 None ,
14251422 ) ;
@@ -1429,7 +1426,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
14291426 loop_block,
14301427 self . lower_label ( opt_label) ,
14311428 hir:: LoopSource :: ForLoop ,
1432- self . lower_span ( e . span . with_hi ( orig_head_span . hi ( ) ) ) ,
1429+ self . lower_span ( e_span . with_hi ( head . span . hi ( ) ) ) ,
14331430 ) ;
14341431 let loop_expr = self . arena . alloc ( hir:: Expr {
14351432 hir_id : self . lower_node_id ( e. id ) ,
@@ -1442,7 +1439,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
14421439
14431440 let into_iter_span = self . mark_span_with_reason (
14441441 DesugaringKind :: ForLoop ( ForLoopLoc :: IntoIter ) ,
1445- orig_head_span ,
1442+ head . span ,
14461443 None ,
14471444 ) ;
14481445
@@ -1458,7 +1455,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
14581455 // #82462: to correctly diagnose borrow errors, the block that contains
14591456 // the iter expr needs to have a span that covers the loop body.
14601457 let desugared_full_span =
1461- self . mark_span_with_reason ( DesugaringKind :: ForLoop ( ForLoopLoc :: Head ) , e . span , None ) ;
1458+ self . mark_span_with_reason ( DesugaringKind :: ForLoop ( ForLoopLoc :: Head ) , e_span , None ) ;
14621459
14631460 let match_expr = self . arena . alloc ( self . expr_match (
14641461 desugared_full_span,
0 commit comments