[Lldb-commits] [lldb] [llvm] [DWARF] Fix DWARTTypePrinter unable to print qualified name for DW_TAG_typedef DIE (PR #117239)

via lldb-commits lldb-commits at lists.llvm.org
Thu Nov 21 13:03:40 PST 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Zequan Wu (ZequanWu)

<details>
<summary>Changes</summary>

Fix a bug introduced in https://github.com/llvm/llvm-project/pull/117071.

Ideally the DWARTTypePrinter test should go to `llvm/unittests/DebugInfo/DWARF/DWARTTypePrinterTest.cpp`.

---
Full diff: https://github.com/llvm/llvm-project/pull/117239.diff


2 Files Affected:

- (modified) lldb/unittests/SymbolFile/DWARF/DWARFDIETest.cpp (+35-13) 
- (modified) llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h (+1) 


``````````diff
diff --git a/lldb/unittests/SymbolFile/DWARF/DWARFDIETest.cpp b/lldb/unittests/SymbolFile/DWARF/DWARFDIETest.cpp
index ae63e286cc1551..3a03ed283a98d4 100644
--- a/lldb/unittests/SymbolFile/DWARF/DWARFDIETest.cpp
+++ b/lldb/unittests/SymbolFile/DWARF/DWARFDIETest.cpp
@@ -23,6 +23,26 @@ using namespace lldb_private;
 using namespace lldb_private::plugin::dwarf;
 using namespace lldb_private::dwarf;
 
+namespace {
+void Test_appendAndTerminateTemplateParameters(const DWARFDIE &die,
+                                               const std::string &expected) {
+  std::string template_name;
+  llvm::raw_string_ostream template_name_os(template_name);
+  llvm::DWARFTypePrinter<DWARFDIE> template_name_printer(template_name_os);
+  template_name_printer.appendAndTerminateTemplateParameters(die);
+  EXPECT_THAT(template_name, expected);
+}
+
+void Test_appendQualifiedName(const DWARFDIE &die,
+                              const std::string &expected) {
+  std::string qualified_name;
+  llvm::raw_string_ostream template_name_os(qualified_name);
+  llvm::DWARFTypePrinter<DWARFDIE> template_name_printer(template_name_os);
+  template_name_printer.appendQualifiedName(die);
+  EXPECT_THAT(qualified_name, expected);
+}
+} // namespace
+
 TEST(DWARFDIETest, ChildIteration) {
   // Tests DWARFDIE::child_iterator.
 
@@ -466,6 +486,14 @@ TEST(DWARFDIETest, TestDWARFTypePrinter) {
           Attributes:
             - Attribute:       DW_AT_type
               Form:            DW_FORM_ref4
+        - Code:            0x8
+          Tag:             DW_TAG_typedef
+          Children:        DW_CHILDREN_no
+          Attributes:
+            - Attribute:       DW_AT_type
+              Form:            DW_FORM_ref4
+            - Attribute:       DW_AT_name
+              Form:            DW_FORM_string
   debug_info:
     - Version:         4
       AddrSize:        8
@@ -494,6 +522,10 @@ TEST(DWARFDIETest, TestDWARFTypePrinter) {
         - AbbrCode:        0x7
           Values:
             - Value:            0x0000000c # update
+        - AbbrCode:        0x8
+          Values:
+            - Value:            0x0000000c
+            - CStr:            my_int
         - AbbrCode:        0x0
         - AbbrCode:        0x0)";
   YAMLModuleTester t(yamldata);
@@ -505,17 +537,7 @@ TEST(DWARFDIETest, TestDWARFTypePrinter) {
   unit->Dump(&debug_os);
   ASSERT_TRUE(unit);
 
-  DWARFDIE t1_die = unit->GetDIE(0x11);
-  std::string template_name;
-  llvm::raw_string_ostream template_name_os(template_name);
-  llvm::DWARFTypePrinter<DWARFDIE> template_name_printer(template_name_os);
-  template_name_printer.appendAndTerminateTemplateParameters(t1_die);
-  EXPECT_THAT(template_name, "<t3<int> >");
-
-  DWARFDIE t2_die = unit->GetDIE(0x1a);
-  std::string qualified_name;
-  llvm::raw_string_ostream qualified_name_os(qualified_name);
-  llvm::DWARFTypePrinter<DWARFDIE> qualified_name_printer(qualified_name_os);
-  qualified_name_printer.appendQualifiedName(t2_die);
-  EXPECT_THAT(qualified_name, "t1<t3<int> >::t2");
+  Test_appendAndTerminateTemplateParameters(unit->GetDIE(0x11), "<t3<int> >");
+  Test_appendQualifiedName(unit->GetDIE(0x1a), "t1<t3<int> >::t2");
+  Test_appendQualifiedName(unit->GetDIE(0x28), "t3<int>::my_int");
 }
diff --git a/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h b/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h
index 962462b8278259..3c936b93865045 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h
@@ -70,6 +70,7 @@ template <typename DieType> struct DWARFTypePrinter {
     case dwarf::DW_TAG_union_type:
     case dwarf::DW_TAG_namespace:
     case dwarf::DW_TAG_enumeration_type:
+    case dwarf::DW_TAG_typedef:
       return true;
     default:
       break;

``````````

</details>


https://github.com/llvm/llvm-project/pull/117239


More information about the lldb-commits mailing list