Extract debug_introduce_local_as_var.
This commit is contained in:
parent
69fef92ab2
commit
1c36f50b3e
1 changed files with 44 additions and 42 deletions
|
@ -358,8 +358,19 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
||||||
let vars = vars.iter().cloned().chain(fallback_var);
|
let vars = vars.iter().cloned().chain(fallback_var);
|
||||||
|
|
||||||
for var in vars {
|
for var in vars {
|
||||||
let Some(dbg_var) = var.dbg_var else { continue };
|
self.debug_introduce_local_as_var(bx, local, base, var);
|
||||||
let Some(dbg_loc) = self.dbg_loc(var.source_info) else { continue };
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn debug_introduce_local_as_var(
|
||||||
|
&self,
|
||||||
|
bx: &mut Bx,
|
||||||
|
local: mir::Local,
|
||||||
|
base: PlaceRef<'tcx, Bx::Value>,
|
||||||
|
var: PerLocalVarDebugInfo<'tcx, Bx::DIVariable>,
|
||||||
|
) {
|
||||||
|
let Some(dbg_var) = var.dbg_var else { return };
|
||||||
|
let Some(dbg_loc) = self.dbg_loc(var.source_info) else { return };
|
||||||
|
|
||||||
let DebugInfoOffset { direct_offset, indirect_offsets, result: _ } =
|
let DebugInfoOffset { direct_offset, indirect_offsets, result: _ } =
|
||||||
calculate_debuginfo_offset(bx, local, &var, base.layout);
|
calculate_debuginfo_offset(bx, local, &var, base.layout);
|
||||||
|
@ -376,8 +387,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
||||||
// LLVM can handle simple things but anything more complex than just a direct
|
// LLVM can handle simple things but anything more complex than just a direct
|
||||||
// offset or one indirect offset of 0 is too complex for it to generate CV records
|
// offset or one indirect offset of 0 is too complex for it to generate CV records
|
||||||
// correctly.
|
// correctly.
|
||||||
&& (direct_offset != Size::ZERO
|
&& (direct_offset != Size::ZERO || !matches!(&indirect_offsets[..], [Size::ZERO] | []));
|
||||||
|| !matches!(&indirect_offsets[..], [Size::ZERO] | []));
|
|
||||||
|
|
||||||
if should_create_individual_allocas {
|
if should_create_individual_allocas {
|
||||||
let DebugInfoOffset { direct_offset: _, indirect_offsets: _, result: place } =
|
let DebugInfoOffset { direct_offset: _, indirect_offsets: _, result: place } =
|
||||||
|
@ -397,15 +407,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
|
||||||
// Point the debug info to `*alloca` for the current variable
|
// Point the debug info to `*alloca` for the current variable
|
||||||
bx.dbg_var_addr(dbg_var, dbg_loc, alloca.llval, Size::ZERO, &[Size::ZERO], None);
|
bx.dbg_var_addr(dbg_var, dbg_loc, alloca.llval, Size::ZERO, &[Size::ZERO], None);
|
||||||
} else {
|
} else {
|
||||||
bx.dbg_var_addr(
|
bx.dbg_var_addr(dbg_var, dbg_loc, base.llval, direct_offset, &indirect_offsets, None);
|
||||||
dbg_var,
|
|
||||||
dbg_loc,
|
|
||||||
base.llval,
|
|
||||||
direct_offset,
|
|
||||||
&indirect_offsets,
|
|
||||||
None,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue