Skip to content

Commit 80ee4b6

Browse files
committed
Auto merge of #142771 - dianqk:mir-stmt-debuginfo, r=cjgillot
Introduce debuginfo to statements in MIR The PR introduces support for debug information within dead statements. Currently, only the reference statement is supported, which is sufficient to fix rust-lang/rust#128081. I don't modify Stable MIR, as I don't think we need debug information when using it. This PR represents the debug information for the dead reference statement via `#dbg_value`. For example, `let _foo_b = &foo.b` becomes `#dbg_value(ptr %foo, !22, !DIExpression(DW_OP_plus_uconst, 4, DW_OP_stack_value), !26)`. You can see this here: https://rust.godbolt.org/z/d43js6adv. The general principle for handling debug information is to never provide less debug information than the optimized LLVM IR. The current rules for dropping debug information in this PR are: - If the LLVM IR cannot represent a reference address, it's replaced with poison or simply dropped. For example, see: https://rust.godbolt.org/z/shGqPec8W. I'm using poison in all such cases now. - All debuginfos is dropped when merging multiple successor BBs. An example is available here: https://rust.godbolt.org/z/TE1q3Wq6M. I doesn't drop debuginfos in `MatchBranchSimplification`, because LLVM also pick one branch for it.
2 parents 9017472 + 6a7c593 commit 80ee4b6

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/debuginfo.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,24 @@ impl<'a, 'gcc, 'tcx> DebugInfoBuilderMethods for Builder<'a, 'gcc, 'tcx> {
2929
_variable_alloca: Self::Value,
3030
_direct_offset: Size,
3131
_indirect_offsets: &[Size],
32-
_fragment: Option<Range<Size>>,
32+
_fragment: &Option<Range<Size>>,
3333
) {
3434
// FIXME(tempdragon): Not sure if this is correct, probably wrong but still keep it here.
3535
#[cfg(feature = "master")]
3636
_variable_alloca.set_location(_dbg_loc);
3737
}
3838

39+
fn dbg_var_value(
40+
&mut self,
41+
_dbg_var: Self::DIVariable,
42+
_dbg_loc: Self::DILocation,
43+
_value: Self::Value,
44+
_direct_offset: Size,
45+
_indirect_offsets: &[Size],
46+
_fragment: &Option<Range<Size>>,
47+
) {
48+
}
49+
3950
fn insert_reference_to_gdb_debug_scripts_section_global(&mut self) {
4051
// TODO(antoyo): insert reference to gdb debug scripts section global.
4152
}

0 commit comments

Comments
 (0)