Auto merge of #82285 - nhwn:nonzero-debug, r=nagisa
Use u32 over Option<u32> in DebugLoc ~~Changes `Option<u32>` fields in `DebugLoc` to `Option<NonZeroU32>`. Since the respective fields (`line` and `col`) are guaranteed to be 1-based, this layout optimization is a freebie.~~ EDIT: Changes `Option<u32>` fields in `DebugLoc` to `u32`. As `@bugadani` pointed out, an `Option<NonZeroU32>` is probably an unnecessary layer of abstraction since the `None` variant is always used as `UNKNOWN_LINE_NUMBER` (which is just `0`). Also, `SourceInfo` in `metadata.rs` already uses a `u32` instead of an `Option<u32>` to encode the same information, so I think this change is warranted. Since `@jyn514` raised some concerns over measuring performance in a similar PR (#82255), does this need a perf run?
This commit is contained in:
commit
234781afe3
3 changed files with 15 additions and 25 deletions
|
@ -1,4 +1,4 @@
|
||||||
use super::metadata::{file_metadata, UNKNOWN_COLUMN_NUMBER, UNKNOWN_LINE_NUMBER};
|
use super::metadata::file_metadata;
|
||||||
use super::utils::DIB;
|
use super::utils::DIB;
|
||||||
use rustc_codegen_ssa::mir::debuginfo::{DebugScope, FunctionDebugContext};
|
use rustc_codegen_ssa::mir::debuginfo::{DebugScope, FunctionDebugContext};
|
||||||
use rustc_codegen_ssa::traits::*;
|
use rustc_codegen_ssa::traits::*;
|
||||||
|
@ -102,8 +102,8 @@ fn make_mir_scope(
|
||||||
DIB(cx),
|
DIB(cx),
|
||||||
parent_scope.dbg_scope.unwrap(),
|
parent_scope.dbg_scope.unwrap(),
|
||||||
file_metadata,
|
file_metadata,
|
||||||
loc.line.unwrap_or(UNKNOWN_LINE_NUMBER),
|
loc.line,
|
||||||
loc.col.unwrap_or(UNKNOWN_COLUMN_NUMBER),
|
loc.col,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1842,10 +1842,7 @@ impl<'tcx> VariantInfo<'_, 'tcx> {
|
||||||
.span;
|
.span;
|
||||||
if !span.is_dummy() {
|
if !span.is_dummy() {
|
||||||
let loc = cx.lookup_debug_loc(span.lo());
|
let loc = cx.lookup_debug_loc(span.lo());
|
||||||
return Some(SourceInfo {
|
return Some(SourceInfo { file: file_metadata(cx, &loc.file), line: loc.line });
|
||||||
file: file_metadata(cx, &loc.file),
|
|
||||||
line: loc.line.unwrap_or(UNKNOWN_LINE_NUMBER),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
|
@ -2484,7 +2481,7 @@ pub fn create_global_var_metadata(cx: &CodegenCx<'ll, '_>, def_id: DefId, global
|
||||||
let loc = cx.lookup_debug_loc(span.lo());
|
let loc = cx.lookup_debug_loc(span.lo());
|
||||||
(file_metadata(cx, &loc.file), loc.line)
|
(file_metadata(cx, &loc.file), loc.line)
|
||||||
} else {
|
} else {
|
||||||
(unknown_file_metadata(cx), None)
|
(unknown_file_metadata(cx), UNKNOWN_LINE_NUMBER)
|
||||||
};
|
};
|
||||||
|
|
||||||
let is_local_to_unit = is_node_local_to_unit(cx, def_id);
|
let is_local_to_unit = is_node_local_to_unit(cx, def_id);
|
||||||
|
@ -2507,7 +2504,7 @@ pub fn create_global_var_metadata(cx: &CodegenCx<'ll, '_>, def_id: DefId, global
|
||||||
linkage_name.as_ptr().cast(),
|
linkage_name.as_ptr().cast(),
|
||||||
linkage_name.len(),
|
linkage_name.len(),
|
||||||
file_metadata,
|
file_metadata,
|
||||||
line_number.unwrap_or(UNKNOWN_LINE_NUMBER),
|
line_number,
|
||||||
type_metadata,
|
type_metadata,
|
||||||
is_local_to_unit,
|
is_local_to_unit,
|
||||||
global,
|
global,
|
||||||
|
|
|
@ -224,9 +224,9 @@ pub struct DebugLoc {
|
||||||
/// Information about the original source file.
|
/// Information about the original source file.
|
||||||
pub file: Lrc<SourceFile>,
|
pub file: Lrc<SourceFile>,
|
||||||
/// The (1-based) line number.
|
/// The (1-based) line number.
|
||||||
pub line: Option<u32>,
|
pub line: u32,
|
||||||
/// The (1-based) column number.
|
/// The (1-based) column number.
|
||||||
pub col: Option<u32>,
|
pub col: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CodegenCx<'ll, '_> {
|
impl CodegenCx<'ll, '_> {
|
||||||
|
@ -243,16 +243,16 @@ impl CodegenCx<'ll, '_> {
|
||||||
let line = (line + 1) as u32;
|
let line = (line + 1) as u32;
|
||||||
let col = (pos - line_pos).to_u32() + 1;
|
let col = (pos - line_pos).to_u32() + 1;
|
||||||
|
|
||||||
(file, Some(line), Some(col))
|
(file, line, col)
|
||||||
}
|
}
|
||||||
Err(file) => (file, None, None),
|
Err(file) => (file, UNKNOWN_LINE_NUMBER, UNKNOWN_COLUMN_NUMBER),
|
||||||
};
|
};
|
||||||
|
|
||||||
// For MSVC, omit the column number.
|
// For MSVC, omit the column number.
|
||||||
// Otherwise, emit it. This mimics clang behaviour.
|
// Otherwise, emit it. This mimics clang behaviour.
|
||||||
// See discussion in https://github.com/rust-lang/rust/issues/42921
|
// See discussion in https://github.com/rust-lang/rust/issues/42921
|
||||||
if self.sess().target.is_like_msvc {
|
if self.sess().target.is_like_msvc {
|
||||||
DebugLoc { file, line, col: None }
|
DebugLoc { file, line, col: UNKNOWN_COLUMN_NUMBER }
|
||||||
} else {
|
} else {
|
||||||
DebugLoc { file, line, col }
|
DebugLoc { file, line, col }
|
||||||
}
|
}
|
||||||
|
@ -358,9 +358,9 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
|
||||||
linkage_name.as_ptr().cast(),
|
linkage_name.as_ptr().cast(),
|
||||||
linkage_name.len(),
|
linkage_name.len(),
|
||||||
file_metadata,
|
file_metadata,
|
||||||
loc.line.unwrap_or(UNKNOWN_LINE_NUMBER),
|
loc.line,
|
||||||
function_type_metadata,
|
function_type_metadata,
|
||||||
scope_line.unwrap_or(UNKNOWN_LINE_NUMBER),
|
scope_line,
|
||||||
flags,
|
flags,
|
||||||
spflags,
|
spflags,
|
||||||
maybe_definition_llfn,
|
maybe_definition_llfn,
|
||||||
|
@ -550,14 +550,7 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
|
||||||
) -> &'ll DILocation {
|
) -> &'ll DILocation {
|
||||||
let DebugLoc { line, col, .. } = self.lookup_debug_loc(span.lo());
|
let DebugLoc { line, col, .. } = self.lookup_debug_loc(span.lo());
|
||||||
|
|
||||||
unsafe {
|
unsafe { llvm::LLVMRustDIBuilderCreateDebugLocation(line, col, scope, inlined_at) }
|
||||||
llvm::LLVMRustDIBuilderCreateDebugLocation(
|
|
||||||
line.unwrap_or(UNKNOWN_LINE_NUMBER),
|
|
||||||
col.unwrap_or(UNKNOWN_COLUMN_NUMBER),
|
|
||||||
scope,
|
|
||||||
inlined_at,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_vtable_metadata(&self, ty: Ty<'tcx>, vtable: Self::Value) {
|
fn create_vtable_metadata(&self, ty: Ty<'tcx>, vtable: Self::Value) {
|
||||||
|
@ -606,7 +599,7 @@ impl DebugInfoMethods<'tcx> for CodegenCx<'ll, 'tcx> {
|
||||||
name.as_ptr().cast(),
|
name.as_ptr().cast(),
|
||||||
name.len(),
|
name.len(),
|
||||||
file_metadata,
|
file_metadata,
|
||||||
loc.line.unwrap_or(UNKNOWN_LINE_NUMBER),
|
loc.line,
|
||||||
type_metadata,
|
type_metadata,
|
||||||
true,
|
true,
|
||||||
DIFlags::FlagZero,
|
DIFlags::FlagZero,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue