[llvm] Fix DW_TAG_template_alias refs in llvm-dwarfdump --verify (PR #89589)
Orlando Cazalet-Hyams via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 22 03:43:42 PDT 2024
https://github.com/OCHyams updated https://github.com/llvm/llvm-project/pull/89589
>From efc74da30d85d4578f471fc695947870a1e6b311 Mon Sep 17 00:00:00 2001
From: Orlando Cazalet-Hyams <orlando.hyams at sony.com>
Date: Mon, 22 Apr 2024 11:17:53 +0100
Subject: [PATCH 1/2] Fix DW_TAG_template_alias refs in llvm-dwarfdump --verify
A DW_TAG_template_alias referenced by a DW_AT_type incorrectly produces the
error:
error: DIE has DW_AT_type with incompatible tag DW_TAG_template_alias
Fix and add test.
---
llvm/include/llvm/BinaryFormat/Dwarf.def | 2 +-
.../X86/verify_template_alias.yaml | 95 +++++++++++++++++++
2 files changed, 96 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/tools/llvm-dwarfdump/X86/verify_template_alias.yaml
diff --git a/llvm/include/llvm/BinaryFormat/Dwarf.def b/llvm/include/llvm/BinaryFormat/Dwarf.def
index 8cf90de637a3d5..460a9264536bc0 100644
--- a/llvm/include/llvm/BinaryFormat/Dwarf.def
+++ b/llvm/include/llvm/BinaryFormat/Dwarf.def
@@ -203,7 +203,7 @@ HANDLE_DW_TAG(0x0040, shared_type, 3, DWARF, DW_KIND_TYPE)
// New in DWARF v4:
HANDLE_DW_TAG(0x0041, type_unit, 4, DWARF, DW_KIND_NONE)
HANDLE_DW_TAG(0x0042, rvalue_reference_type, 4, DWARF, DW_KIND_TYPE)
-HANDLE_DW_TAG(0x0043, template_alias, 4, DWARF, DW_KIND_NONE)
+HANDLE_DW_TAG(0x0043, template_alias, 4, DWARF, DW_KIND_TYPE)
// New in DWARF v5:
HANDLE_DW_TAG(0x0044, coarray_type, 5, DWARF, DW_KIND_TYPE)
HANDLE_DW_TAG(0x0045, generic_subrange, 5, DWARF, DW_KIND_NONE)
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/verify_template_alias.yaml b/llvm/test/tools/llvm-dwarfdump/X86/verify_template_alias.yaml
new file mode 100644
index 00000000000000..2ccd2655e6a4cc
--- /dev/null
+++ b/llvm/test/tools/llvm-dwarfdump/X86/verify_template_alias.yaml
@@ -0,0 +1,95 @@
+# yaml2obj %s | llvm-dwarfdump --verify -
+
+## Check --verify doesn't fail when a DW_AT_type references a
+## DW_TAG_template_alias.
+##
+## $ cat test.cpp
+## template <typename T>
+## using A = T;
+## A<bool> a;
+##
+## $ clang++ test.cpp -g -gtemplate-alias -gsimple-template-names
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+DWARF:
+ debug_str:
+ - "clang version 19.0.0"
+ - "a"
+ - "A"
+ - "T"
+ - "bool"
+ 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:
+ - Attribute: DW_AT_name
+ Form: DW_FORM_strp
+ - Code: 0x0000000000000003
+ Tag: DW_TAG_template_alias
+ Children: DW_CHILDREN_yes
+ Attributes:
+ - Attribute: DW_AT_name
+ Form: DW_FORM_strp
+ - Attribute: DW_AT_type
+ Form: DW_FORM_ref_addr
+ - Code: 0x0000000000000004
+ Tag: DW_TAG_template_type_parameter
+ Children: DW_CHILDREN_no
+ Attributes:
+ - Attribute: DW_AT_name
+ Form: DW_FORM_strp
+ - Attribute: DW_AT_type
+ Form: DW_FORM_ref_addr
+ - Code: 0x0000000000000005
+ Tag: DW_TAG_variable
+ Children: DW_CHILDREN_no
+ Attributes:
+ - Attribute: DW_AT_name
+ Form: DW_FORM_strp
+ - Attribute: DW_AT_type
+ Form: DW_FORM_ref_addr
+
+ debug_info:
+ - Version: 4
+ AbbrOffset: 0x0000000000000000
+ AddrSize: 8
+ Entries:
+ - AbbrCode: 0x00000001
+ Values:
+ - Value: 0x0000000000000000
+ - Value: 0x0000000000000021
+ - AbbrCode: 0x00000002
+ Values:
+ - Value: 0x000000000000001b
+ - AbbrCode: 0x00000003
+ Values:
+ - Value: 0x0000000000000017
+ - Value: 0x0000000000000012
+ - AbbrCode: 0x00000004
+ Values:
+ - Value: 0x0000000000000019
+ - Value: 0x0000000000000012
+ - AbbrCode: 0x00000000
+ Values: []
+ - AbbrCode: 0x00000005
+ Values:
+ - Value: 0x0000000000000015
+ - Value: 0x0000000000000017
+ - AbbrCode: 0x00000000
+ Values: []
+...
>From 07d3b650151dc4a6e8d923ac7fdd2b55b7970a49 Mon Sep 17 00:00:00 2001
From: Orlando Cazalet-Hyams <orlando.hyams at sony.com>
Date: Mon, 22 Apr 2024 11:43:00 +0100
Subject: [PATCH 2/2] fix run line
---
llvm/test/tools/llvm-dwarfdump/X86/verify_template_alias.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/verify_template_alias.yaml b/llvm/test/tools/llvm-dwarfdump/X86/verify_template_alias.yaml
index 2ccd2655e6a4cc..e243c66c9aa6fc 100644
--- a/llvm/test/tools/llvm-dwarfdump/X86/verify_template_alias.yaml
+++ b/llvm/test/tools/llvm-dwarfdump/X86/verify_template_alias.yaml
@@ -1,4 +1,4 @@
-# yaml2obj %s | llvm-dwarfdump --verify -
+# RUN: yaml2obj %s | llvm-dwarfdump --verify -
## Check --verify doesn't fail when a DW_AT_type references a
## DW_TAG_template_alias.
More information about the llvm-commits
mailing list