@@ -378,6 +378,52 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
378378 }
379379 }
380380
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+
381427 fn debug_introduce_local_as_var (
382428 & self ,
383429 bx : & mut Bx ,
@@ -387,7 +433,6 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
387433 ) {
388434 let Some ( dbg_var) = var. dbg_var else { return } ;
389435 let Some ( dbg_loc) = self . dbg_loc ( var. source_info ) else { return } ;
390-
391436 let DebugInfoOffset { direct_offset, indirect_offsets, result : _ } =
392437 calculate_debuginfo_offset ( bx, var. projection , base. layout ) ;
393438
@@ -422,6 +467,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
422467 bx. dbg_var_addr (
423468 dbg_var,
424469 dbg_loc,
470+ true ,
425471 alloca. val . llval ,
426472 Size :: ZERO ,
427473 & [ Size :: ZERO ] ,
@@ -431,6 +477,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
431477 bx. dbg_var_addr (
432478 dbg_var,
433479 dbg_loc,
480+ true ,
434481 base. val . llval ,
435482 direct_offset,
436483 & indirect_offsets,
@@ -456,7 +503,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
456503 let base = FunctionCx :: spill_operand_to_stack ( operand, Some ( name) , bx) ;
457504 bx. clear_dbg_loc ( ) ;
458505
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) ;
460507 }
461508 }
462509 }
0 commit comments