diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-08-21 18:15:01 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-21 18:15:01 +0200 |
| commit | dea325e583adfcb9fec771da547dc304e79a5ee2 (patch) | |
| tree | 504b1213a2f410b0570185c2a31f5bc9b4a337cf /tests/debuginfo | |
| parent | 982c6f8721416431ec62bb0b9105c0578a9fc603 (diff) | |
| parent | 4e9725cd2f5327f65f881c59d6bcbae46308318e (diff) | |
| download | rust-dea325e583adfcb9fec771da547dc304e79a5ee2.tar.gz rust-dea325e583adfcb9fec771da547dc304e79a5ee2.zip | |
Rollup merge of #128627 - khuey:DUMMY_SP-line-no, r=nnethercote
Special case DUMMY_SP to emit line 0/column 0 locations on DWARF platforms.
Line 0 has a special meaning in DWARF. From the version 5 spec:
The compiler may emit the value 0 in cases
where an instruction cannot be attributed to any
source line.
DUMMY_SP spans cannot be attributed to any line. However, because rustc internally stores line numbers starting at zero, lookup_debug_loc() adjusts every line number by one. Special casing DUMMY_SP to actually emit line 0 ensures rustc communicates to the debugger that there's no meaningful source code for this instruction, rather than telling the debugger to jump to line 1 randomly.
Diffstat (limited to 'tests/debuginfo')
| -rw-r--r-- | tests/debuginfo/dummy_span.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/debuginfo/dummy_span.rs b/tests/debuginfo/dummy_span.rs new file mode 100644 index 00000000000..d02eead470f --- /dev/null +++ b/tests/debuginfo/dummy_span.rs @@ -0,0 +1,45 @@ +//@ min-lldb-version: 310 + +//@ compile-flags:-g + +// === GDB TESTS =================================================================================== + +// gdb-command:run 7 + +// gdb-command:next +// gdb-command:next +// gdb-check:[...]#loc1[...] +// gdb-command:next +// gdb-check:[...]#loc2[...] + +// === LLDB TESTS ================================================================================== + +// lldb-command:run 7 + +// lldb-command:next +// lldb-command:next +// lldb-command:frame select +// lldb-check:[...]#loc1[...] +// lldb-command:next +// lldb-command:frame select +// lldb-check:[...]#loc2[...] + +use std::env; +use std::num::ParseIntError; + +fn main() -> Result<(), ParseIntError> { + let args = env::args(); + let number_str = args.skip(1).next().unwrap(); + let number = number_str.parse::<i32>()?; + zzz(); // #break + if number % 7 == 0 { + // This generates code with a dummy span for + // some reason. If that ever changes this + // test will not test what it wants to test. + return Ok(()); // #loc1 + } + println!("{}", number); + Ok(()) +} // #loc2 + +fn zzz() { () } |
