Skip to content

Commit 9daa026

Browse files
committed
Use LLVMDIBuilder(CreateExpression|InsertDeclareRecordAtEnd)
1 parent a6d2617 commit 9daa026

File tree

3 files changed

+26
-28
lines changed

3 files changed

+26
-28
lines changed

compiler/rustc_codegen_llvm/src/debuginfo/mod.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -191,18 +191,21 @@ impl<'ll> DebugInfoBuilderMethods for Builder<'_, 'll, '_> {
191191
addr_ops.push((fragment.end - fragment.start).bits() as u64);
192192
}
193193

194+
let di_builder = DIB(self.cx());
195+
let addr_expr = unsafe {
196+
llvm::LLVMDIBuilderCreateExpression(di_builder, addr_ops.as_ptr(), addr_ops.len())
197+
};
194198
unsafe {
195199
// FIXME(eddyb) replace `llvm.dbg.declare` with `llvm.dbg.addr`.
196-
llvm::LLVMRustDIBuilderInsertDeclareAtEnd(
197-
DIB(self.cx()),
200+
llvm::LLVMDIBuilderInsertDeclareRecordAtEnd(
201+
di_builder,
198202
variable_alloca,
199203
dbg_var,
200-
addr_ops.as_ptr(),
201-
addr_ops.len() as c_uint,
204+
addr_expr,
202205
dbg_loc,
203206
self.llbb(),
204-
);
205-
}
207+
)
208+
};
206209
}
207210

208211
fn set_dbg_loc(&mut self, dbg_loc: &'ll DILocation) {

compiler/rustc_codegen_llvm/src/llvm/ffi.rs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,8 @@ unsafe extern "C" {
806806
pub(crate) type Metadata;
807807
pub(crate) type BasicBlock;
808808
pub(crate) type Comdat;
809+
/// `&'ll DbgRecord` represents `LLVMDbgRecordRef`.
810+
pub(crate) type DbgRecord;
809811
}
810812
#[repr(C)]
811813
pub(crate) struct Builder<'a>(InvariantOpaque<'a>);
@@ -2000,6 +2002,21 @@ unsafe extern "C" {
20002002
Data: *const Option<&'ll Metadata>,
20012003
NumElements: size_t,
20022004
) -> &'ll Metadata;
2005+
2006+
pub(crate) fn LLVMDIBuilderCreateExpression<'ll>(
2007+
Builder: &DIBuilder<'ll>,
2008+
Addr: *const u64,
2009+
Length: size_t,
2010+
) -> &'ll Metadata;
2011+
2012+
pub(crate) fn LLVMDIBuilderInsertDeclareRecordAtEnd<'ll>(
2013+
Builder: &DIBuilder<'ll>,
2014+
Storage: &'ll Value,
2015+
VarInfo: &'ll Metadata,
2016+
Expr: &'ll Metadata,
2017+
DebugLoc: &'ll Metadata,
2018+
Block: &'ll BasicBlock,
2019+
) -> &'ll DbgRecord;
20032020
}
20042021

20052022
#[link(name = "llvm-wrapper", kind = "static")]
@@ -2381,16 +2398,6 @@ unsafe extern "C" {
23812398
AlignInBits: u32,
23822399
) -> &'a DIVariable;
23832400

2384-
pub(crate) fn LLVMRustDIBuilderInsertDeclareAtEnd<'a>(
2385-
Builder: &DIBuilder<'a>,
2386-
Val: &'a Value,
2387-
VarInfo: &'a DIVariable,
2388-
AddrOps: *const u64,
2389-
AddrOpsCount: c_uint,
2390-
DL: &'a DILocation,
2391-
InsertAtEnd: &'a BasicBlock,
2392-
);
2393-
23942401
pub(crate) fn LLVMRustDIBuilderCreateEnumerator<'a>(
23952402
Builder: &DIBuilder<'a>,
23962403
Name: *const c_char,

compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1142,18 +1142,6 @@ extern "C" LLVMMetadataRef LLVMRustDIBuilderCreateVariable(
11421142
}
11431143
}
11441144

1145-
extern "C" void
1146-
LLVMRustDIBuilderInsertDeclareAtEnd(LLVMDIBuilderRef Builder, LLVMValueRef V,
1147-
LLVMMetadataRef VarInfo, uint64_t *AddrOps,
1148-
unsigned AddrOpsCount, LLVMMetadataRef DL,
1149-
LLVMBasicBlockRef InsertAtEnd) {
1150-
unwrap(Builder)->insertDeclare(
1151-
unwrap(V), unwrap<DILocalVariable>(VarInfo),
1152-
unwrap(Builder)->createExpression(
1153-
llvm::ArrayRef<uint64_t>(AddrOps, AddrOpsCount)),
1154-
DebugLoc(cast<MDNode>(unwrap(DL))), unwrap(InsertAtEnd));
1155-
}
1156-
11571145
extern "C" LLVMMetadataRef
11581146
LLVMRustDIBuilderCreateEnumerator(LLVMDIBuilderRef Builder, const char *Name,
11591147
size_t NameLen, const uint64_t Value[2],

0 commit comments

Comments
 (0)