mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
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.
This commit is contained in:
parent
a6043039ad
commit
78caecf8f3
@ -20,7 +20,7 @@ use rustc_session::config::{self, DebugInfo};
|
|||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
use rustc_span::symbol::Symbol;
|
use rustc_span::symbol::Symbol;
|
||||||
use rustc_span::{
|
use rustc_span::{
|
||||||
BytePos, Pos, SourceFile, SourceFileAndLine, SourceFileHash, Span, StableSourceFileId,
|
BytePos, Pos, SourceFile, SourceFileAndLine, SourceFileHash, Span, StableSourceFileId, DUMMY_SP,
|
||||||
};
|
};
|
||||||
use rustc_target::abi::Size;
|
use rustc_target::abi::Size;
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
@ -570,7 +570,12 @@ impl<'ll, 'tcx> DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
|
|||||||
inlined_at: Option<&'ll DILocation>,
|
inlined_at: Option<&'ll DILocation>,
|
||||||
span: Span,
|
span: Span,
|
||||||
) -> &'ll DILocation {
|
) -> &'ll DILocation {
|
||||||
let DebugLoc { line, col, .. } = self.lookup_debug_loc(span.lo());
|
let (line, col) = if span == DUMMY_SP && !self.sess().target.is_like_msvc {
|
||||||
|
(0, 0)
|
||||||
|
} else {
|
||||||
|
let DebugLoc { line, col, .. } = self.lookup_debug_loc(span.lo());
|
||||||
|
(line, col)
|
||||||
|
};
|
||||||
|
|
||||||
unsafe { llvm::LLVMRustDIBuilderCreateDebugLocation(line, col, scope, inlined_at) }
|
unsafe { llvm::LLVMRustDIBuilderCreateDebugLocation(line, col, scope, inlined_at) }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user