@@ -378,6 +378,52 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
378
378
}
379
379
}
380
380
381
+ pub ( crate ) fn debug_new_value_to_local (
382
+ & self ,
383
+ bx : & mut Bx ,
384
+ local : mir:: Local ,
385
+ base : PlaceValue < Bx :: Value > ,
386
+ layout : TyAndLayout < ' tcx > ,
387
+ projection : & [ mir:: PlaceElem < ' tcx > ] ,
388
+ ) {
389
+ let full_debug_info = bx. sess ( ) . opts . debuginfo == DebugInfo :: Full ;
390
+ if !full_debug_info {
391
+ return ;
392
+ }
393
+
394
+ let vars = match & self . per_local_var_debug_info {
395
+ Some ( per_local) => & per_local[ local] ,
396
+ None => return ,
397
+ } ;
398
+
399
+ for var in vars. iter ( ) . cloned ( ) {
400
+ self . debug_new_value_to_local_as_var ( bx, base, layout, projection, var) ;
401
+ }
402
+ }
403
+
404
+ fn debug_new_value_to_local_as_var (
405
+ & self ,
406
+ bx : & mut Bx ,
407
+ base : PlaceValue < Bx :: Value > ,
408
+ layout : TyAndLayout < ' tcx > ,
409
+ projection : & [ mir:: PlaceElem < ' tcx > ] ,
410
+ var : PerLocalVarDebugInfo < ' tcx , Bx :: DIVariable > ,
411
+ ) {
412
+ let Some ( dbg_var) = var. dbg_var else { return } ;
413
+ let Some ( dbg_loc) = self . dbg_loc ( var. source_info ) else { return } ;
414
+ let DebugInfoOffset { direct_offset, indirect_offsets, result : _ } =
415
+ calculate_debuginfo_offset ( bx, projection, layout) ;
416
+ bx. dbg_var_addr (
417
+ dbg_var,
418
+ dbg_loc,
419
+ false ,
420
+ base. llval ,
421
+ direct_offset,
422
+ & indirect_offsets,
423
+ var. fragment ,
424
+ ) ;
425
+ }
426
+
381
427
fn debug_introduce_local_as_var (
382
428
& self ,
383
429
bx : & mut Bx ,
@@ -387,7 +433,6 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
387
433
) {
388
434
let Some ( dbg_var) = var. dbg_var else { return } ;
389
435
let Some ( dbg_loc) = self . dbg_loc ( var. source_info ) else { return } ;
390
-
391
436
let DebugInfoOffset { direct_offset, indirect_offsets, result : _ } =
392
437
calculate_debuginfo_offset ( bx, var. projection , base. layout ) ;
393
438
@@ -422,6 +467,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
422
467
bx. dbg_var_addr (
423
468
dbg_var,
424
469
dbg_loc,
470
+ true ,
425
471
alloca. val . llval ,
426
472
Size :: ZERO ,
427
473
& [ Size :: ZERO ] ,
@@ -431,6 +477,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
431
477
bx. dbg_var_addr (
432
478
dbg_var,
433
479
dbg_loc,
480
+ true ,
434
481
base. val . llval ,
435
482
direct_offset,
436
483
& indirect_offsets,
@@ -456,7 +503,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
456
503
let base = FunctionCx :: spill_operand_to_stack ( operand, Some ( name) , bx) ;
457
504
bx. clear_dbg_loc ( ) ;
458
505
459
- bx. dbg_var_addr ( dbg_var, dbg_loc, base. val . llval , Size :: ZERO , & [ ] , fragment) ;
506
+ bx. dbg_var_addr ( dbg_var, dbg_loc, true , base. val . llval , Size :: ZERO , & [ ] , fragment) ;
460
507
}
461
508
}
462
509
}
0 commit comments