[llvm] [DWARF] Disable generation of cross-CU references for DWARF V2 (PR #192516)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 17 12:03:53 PDT 2026
================
@@ -0,0 +1,59 @@
+; RUN: %llc_dwarf -dwarf-version=3 -O0 -filetype=obj < %s | llvm-dwarfdump -v -debug-info - | FileCheck --check-prefix=CHECK-V3 %s
+; RUN: %llc_dwarf -dwarf-version=2 -O0 -filetype=obj < %s | llvm-dwarfdump -v -debug-info - | FileCheck --check-prefix=CHECK-V2 --implicit-check-not=DW_FORM_ref_addr %s
+
+; DWARF v2 is incompatible with 64-bit XCOFF/AIX (requires DWARF64 format which needs DWARF v3+).
+; UNSUPPORTED: target=powerpc64{{.*}}-aix{{.*}}
+
+; DWARF V3: Expect cross-CU type deduplication resulting in only one "int"
+; definition and a DW_FORM_ref_addr.
+
+; CHECK-V3: Compile Unit{{.*}} version = 0x0003
+
+; CHECK-V3: DW_TAG_compile_unit
+; CHECK-V3: DW_AT_name{{.*}}"x"
+; CHECK-V3-NEXT: DW_AT_type [DW_FORM_ref4]{{.*}}(cu + {{.*}} => {0x[[INT_ADDR:[0-9a-f]+]]} "int")
+; CHECK-V3: [[INT_ADDR]]:{{.*}}DW_TAG_base_type
+; CHECK-V3-NEXT: DW_AT_name{{.*}}"int"
+
+; CHECK-V3: DW_TAG_compile_unit
+; CHECK-V3: DW_AT_name{{.*}}"y"
+; CHECK-V3-NEXT: DW_AT_type [DW_FORM_ref_addr]{{.*}}(0x{{0*}}[[INT_ADDR]] "int")
----------------
Nadharm wrote:
I think `DW_FORM_ref_addr` values are hardcoded to get zero-padded out to 8-bytes for dwarfdump: https://github.com/llvm/llvm-project/blob/809b4cfa2b15f1e5699ff00c842266e5362ccd32/llvm/lib/DebugInfo/DWARF/DWARFFormValue.cpp#L522
This should probably be checking `getRefAddrByteSize()` instead. Do you have a preference on whether I can tack that onto this PR or should I make another?
https://github.com/llvm/llvm-project/pull/192516
More information about the llvm-commits
mailing list