Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion cuda-oxide/crates/llvm-export/src/export/debug.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,9 +177,12 @@ impl<'a> ModuleExportState<'a> {
"!{dwarf_version_id} = !{{i32 2, !\"Dwarf Version\", i32 2}}"
)
.unwrap();
// NVVM requires Error (1), including when linking native CUDA LTO-IR.
// Ordinary LLVM debug metadata keeps its Warning (2) merge behavior.
let debug_version_behavior = if self.nvvm_ir_dialect.is_some() { 1 } else { 2 };
writeln!(
output,
"!{debug_info_version_id} = !{{i32 2, !\"Debug Info Version\", i32 3}}"
"!{debug_info_version_id} = !{{i32 {debug_version_behavior}, !\"Debug Info Version\", i32 3}}"
)
.unwrap();

Expand Down
14 changes: 14 additions & 0 deletions cuda-oxide/crates/llvm-export/tests/export_test/debug_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,20 @@ fn line_table_debug_metadata_emits_function_scope_and_instruction_locations() {
let ir =
export_module_to_string_with_config(&ctx, &module, &config).expect("debug export succeeds");

assert!(ir.contains("!{i32 2, !\"Debug Info Version\", i32 3}"));
for debug_kind in [DebugKind::LineTables, DebugKind::Full] {
let nvvm_config = DebugConfig {
inner: NvvmExportConfig::new(NvvmIrDialect::Modern),
debug_kind,
};
let nvvm_ir = export_module_to_string_with_config(&ctx, &module, &nvvm_config)
.expect("NVVM debug export succeeds");
assert!(
nvvm_ir.contains("!{i32 1, !\"Debug Info Version\", i32 3}"),
"NVVM requires Error merge behavior for native LTO linkage:\n{nvvm_ir}"
);
}

let define_line = ir
.lines()
.find(|line| line.starts_with("define "))
Expand Down
Loading