forked from M-Labs/nac3
core: Restore debug location when generating allocas
Debug location is lost when moving the builder cursor.
This commit is contained in:
parent
c5629d4eb5
commit
1a54aaa1c0
@ -129,6 +129,8 @@ impl CodeGenTargetMachineOptions {
|
|||||||
pub struct CodeGenContext<'ctx, 'a> {
|
pub struct CodeGenContext<'ctx, 'a> {
|
||||||
pub ctx: &'ctx Context,
|
pub ctx: &'ctx Context,
|
||||||
pub builder: Builder<'ctx>,
|
pub builder: Builder<'ctx>,
|
||||||
|
/// The [DebugInfoBuilder], [compilation unit information][DICompileUnit], and
|
||||||
|
/// [scope information][DIScope] of this context.
|
||||||
pub debug_info: (DebugInfoBuilder<'ctx>, DICompileUnit<'ctx>, DIScope<'ctx>),
|
pub debug_info: (DebugInfoBuilder<'ctx>, DICompileUnit<'ctx>, DIScope<'ctx>),
|
||||||
pub module: Module<'ctx>,
|
pub module: Module<'ctx>,
|
||||||
pub top_level: &'a TopLevelContext,
|
pub top_level: &'a TopLevelContext,
|
||||||
|
@ -27,12 +27,27 @@ pub fn gen_var<'ctx, 'a>(
|
|||||||
ty: BasicTypeEnum<'ctx>,
|
ty: BasicTypeEnum<'ctx>,
|
||||||
name: Option<&str>,
|
name: Option<&str>,
|
||||||
) -> Result<PointerValue<'ctx>, String> {
|
) -> Result<PointerValue<'ctx>, String> {
|
||||||
|
// Restore debug location
|
||||||
|
let di_loc = ctx.debug_info.0.create_debug_location(
|
||||||
|
ctx.ctx,
|
||||||
|
ctx.current_loc.row as u32,
|
||||||
|
ctx.current_loc.column as u32,
|
||||||
|
ctx.debug_info.2,
|
||||||
|
None,
|
||||||
|
);
|
||||||
|
|
||||||
// put the alloca in init block
|
// put the alloca in init block
|
||||||
let current = ctx.builder.get_insert_block().unwrap();
|
let current = ctx.builder.get_insert_block().unwrap();
|
||||||
|
|
||||||
// position before the last branching instruction...
|
// position before the last branching instruction...
|
||||||
ctx.builder.position_before(&ctx.init_bb.get_last_instruction().unwrap());
|
ctx.builder.position_before(&ctx.init_bb.get_last_instruction().unwrap());
|
||||||
|
ctx.builder.set_current_debug_location(di_loc);
|
||||||
|
|
||||||
let ptr = ctx.builder.build_alloca(ty, name.unwrap_or(""));
|
let ptr = ctx.builder.build_alloca(ty, name.unwrap_or(""));
|
||||||
|
|
||||||
ctx.builder.position_at_end(current);
|
ctx.builder.position_at_end(current);
|
||||||
|
ctx.builder.set_current_debug_location(di_loc);
|
||||||
|
|
||||||
Ok(ptr)
|
Ok(ptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user