[llvm-branch-commits] [llvm] release/23.x: [DebugInfo] Don't assert on missing template parameter names (#211412) (PR #211457)
Tobias Hieta via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Jul 23 23:32:11 PDT 2026
https://github.com/tru updated https://github.com/llvm/llvm-project/pull/211457
>From 060d53f28f9692cb29c4900774adb6d47c00d482 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Wed, 22 Jul 2026 22:52:56 -0500
Subject: [PATCH] [DebugInfo] Don't assert on missing template parameter names
(#211412)
The DWARF verifier reconstructs simplified template names through
DWARFTypePrinter to compare them against the original DW_AT_name. On
malformed input, a template parameter can have no recoverable name,
which tripped assert(RawName) and aborted instead of letting the
verifier report the problem.
Assisted-by: Claude
rdar://182715403
(cherry picked from commit bdddd134c1af6b0c5196ea944edf4c5c76019306)
---
.../llvm/DebugInfo/DWARF/DWARFTypePrinter.h | 6 +-
.../X86/verify_simplified_template_names.yaml | 83 +++++++++++++++++++
2 files changed, 87 insertions(+), 2 deletions(-)
create mode 100644 llvm/test/tools/llvm-dwarfdump/X86/verify_simplified_template_names.yaml
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h
index 81a5e54a71145..6e1b8de48c913 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h
@@ -505,7 +505,8 @@ bool DWARFTypePrinter<DieType>::appendTemplateParameters(DieType D,
T.getTag() == dwarf::DW_TAG_ptr_to_member_type)
continue;
const char *RawName = detail::toString(T.find(dwarf::DW_AT_name));
- assert(RawName);
+ if (!RawName)
+ continue;
StringRef Name = RawName;
auto V = C.find(dwarf::DW_AT_const_value);
bool IsQualifiedChar = false;
@@ -604,7 +605,8 @@ bool DWARFTypePrinter<DieType>::appendTemplateParameters(DieType D,
if (C.getTag() == dwarf::DW_TAG_GNU_template_template_param) {
const char *RawName =
detail::toString(C.find(dwarf::DW_AT_GNU_template_name));
- assert(RawName);
+ if (!RawName)
+ continue;
StringRef Name = RawName;
Sep();
OS << Name;
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/verify_simplified_template_names.yaml b/llvm/test/tools/llvm-dwarfdump/X86/verify_simplified_template_names.yaml
new file mode 100644
index 0000000000000..6bf5c550bd74e
--- /dev/null
+++ b/llvm/test/tools/llvm-dwarfdump/X86/verify_simplified_template_names.yaml
@@ -0,0 +1,83 @@
+# RUN: yaml2obj %s | not llvm-dwarfdump --verify - 2>&1 | FileCheck %s
+
+## The --verify path reconstructs simplified template names via
+## DWARFTypePrinter to compare them against the original DW_AT_name. Template
+## parameters whose name cannot be recovered must be diagnosed as an
+## unreconstructable name rather than aborting the verifier with an assertion.
+## This covers both name lookups that used to assert:
+## - a DW_TAG_template_value_parameter whose DW_AT_type resolves to a type
+## with no DW_AT_name, and
+## - a DW_TAG_GNU_template_template_param with no DW_AT_GNU_template_name.
+
+# CHECK-NOT: Assertion
+# CHECK: error: Simplified template DW_AT_name could not be reconstituted:
+# CHECK-NEXT: original: Foo<int>
+# CHECK-NEXT: reconstituted: Foo<>
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+DWARF:
+ debug_str:
+ - "clang"
+ - "_STN|Foo|<int>"
+ debug_abbrev:
+ - Table:
+ - Code: 0x0000000000000001
+ Tag: DW_TAG_compile_unit
+ Children: DW_CHILDREN_yes
+ Attributes:
+ - Attribute: DW_AT_name
+ Form: DW_FORM_strp
+ - Attribute: DW_AT_language
+ Form: DW_FORM_data2
+ - Code: 0x0000000000000002
+ Tag: DW_TAG_base_type
+ Children: DW_CHILDREN_no
+ Attributes: []
+ - Code: 0x0000000000000003
+ Tag: DW_TAG_structure_type
+ Children: DW_CHILDREN_yes
+ Attributes:
+ - Attribute: DW_AT_name
+ Form: DW_FORM_strp
+ - Code: 0x0000000000000004
+ Tag: DW_TAG_template_value_parameter
+ Children: DW_CHILDREN_no
+ Attributes:
+ - Attribute: DW_AT_type
+ Form: DW_FORM_ref4
+ - Attribute: DW_AT_const_value
+ Form: DW_FORM_sdata
+ - Code: 0x0000000000000005
+ Tag: DW_TAG_GNU_template_template_param
+ Children: DW_CHILDREN_no
+ Attributes: []
+ debug_info:
+ - Version: 4
+ AbbrOffset: 0x0000000000000000
+ AddrSize: 8
+ Entries:
+ - AbbrCode: 0x00000001
+ Values:
+ - Value: 0x0000000000000000
+ - Value: 0x0000000000000004
+ - AbbrCode: 0x00000002
+ Values: []
+ - AbbrCode: 0x00000003
+ Values:
+ - Value: 0x0000000000000006
+ - AbbrCode: 0x00000004
+ Values:
+ - Value: 0x0000000000000012
+ - Value: 0x0000000000000000
+ - AbbrCode: 0x00000005
+ Values: []
+ - AbbrCode: 0x00000000
+ Values: []
+ - AbbrCode: 0x00000000
+ Values: []
+...
More information about the llvm-branch-commits
mailing list