@@ -1332,15 +1332,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
1332
1332
body : & Block ,
1333
1333
opt_label : Option < Label > ,
1334
1334
) -> hir:: Expr < ' hir > {
1335
- let orig_head_span = head. span ;
1336
1335
// 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 ) ;
1344
1340
1345
1341
let iter = Ident :: with_dummy_span ( sym:: iter) ;
1346
1342
@@ -1354,23 +1350,24 @@ impl<'hir> LoweringContext<'_, 'hir> {
1354
1350
// `::std::option::Option::Some(val) => __next = val`
1355
1351
let pat_arm = {
1356
1352
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) ;
1360
1357
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 ) ) ,
1363
1360
ThinVec :: new ( ) ,
1364
1361
) ) ;
1365
- let some_pat = self . pat_some ( pat . span , val_pat) ;
1362
+ let some_pat = self . pat_some ( pat_span , val_pat) ;
1366
1363
self . arm ( some_pat, assign)
1367
1364
} ;
1368
1365
1369
1366
// `::std::option::Option::None => break`
1370
1367
let break_arm = {
1371
1368
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 ) ;
1374
1371
self . arm ( pat, break_expr)
1375
1372
} ;
1376
1373
@@ -1416,10 +1413,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
1416
1413
1417
1414
let body_block = self . with_loop_scope ( e. id , |this| this. lower_block ( body, false ) ) ;
1418
1415
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) ;
1420
1417
1421
1418
let loop_block = self . block_all (
1422
- e . span ,
1419
+ e_span ,
1423
1420
arena_vec ! [ self ; next_let, match_stmt, pat_let, body_stmt] ,
1424
1421
None ,
1425
1422
) ;
@@ -1429,7 +1426,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
1429
1426
loop_block,
1430
1427
self . lower_label ( opt_label) ,
1431
1428
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 ( ) ) ) ,
1433
1430
) ;
1434
1431
let loop_expr = self . arena . alloc ( hir:: Expr {
1435
1432
hir_id : self . lower_node_id ( e. id ) ,
@@ -1442,7 +1439,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
1442
1439
1443
1440
let into_iter_span = self . mark_span_with_reason (
1444
1441
DesugaringKind :: ForLoop ( ForLoopLoc :: IntoIter ) ,
1445
- orig_head_span ,
1442
+ head . span ,
1446
1443
None ,
1447
1444
) ;
1448
1445
@@ -1458,7 +1455,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
1458
1455
// #82462: to correctly diagnose borrow errors, the block that contains
1459
1456
// the iter expr needs to have a span that covers the loop body.
1460
1457
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 ) ;
1462
1459
1463
1460
let match_expr = self . arena . alloc ( self . expr_match (
1464
1461
desugared_full_span,
0 commit comments