Skip to content

Commit 5ecdcda

Browse files
committed
[DWARF] Fix DWARTTypePrinter unable to print qualified name for DW_TAG_typedef DIE
1 parent f7497b1 commit 5ecdcda

File tree

2 files changed

+36
-13
lines changed

2 files changed

+36
-13
lines changed

lldb/unittests/SymbolFile/DWARF/DWARFDIETest.cpp

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,26 @@ using namespace lldb_private;
2323
using namespace lldb_private::plugin::dwarf;
2424
using namespace lldb_private::dwarf;
2525

26+
namespace {
27+
void Test_appendAndTerminateTemplateParameters(const DWARFDIE &die,
28+
const std::string &expected) {
29+
std::string template_name;
30+
llvm::raw_string_ostream template_name_os(template_name);
31+
llvm::DWARFTypePrinter<DWARFDIE> template_name_printer(template_name_os);
32+
template_name_printer.appendAndTerminateTemplateParameters(die);
33+
EXPECT_THAT(template_name, expected);
34+
}
35+
36+
void Test_appendQualifiedName(const DWARFDIE &die,
37+
const std::string &expected) {
38+
std::string qualified_name;
39+
llvm::raw_string_ostream template_name_os(qualified_name);
40+
llvm::DWARFTypePrinter<DWARFDIE> template_name_printer(template_name_os);
41+
template_name_printer.appendQualifiedName(die);
42+
EXPECT_THAT(qualified_name, expected);
43+
}
44+
} // namespace
45+
2646
TEST(DWARFDIETest, ChildIteration) {
2747
// Tests DWARFDIE::child_iterator.
2848

@@ -466,6 +486,14 @@ TEST(DWARFDIETest, TestDWARFTypePrinter) {
466486
Attributes:
467487
- Attribute: DW_AT_type
468488
Form: DW_FORM_ref4
489+
- Code: 0x8
490+
Tag: DW_TAG_typedef
491+
Children: DW_CHILDREN_no
492+
Attributes:
493+
- Attribute: DW_AT_type
494+
Form: DW_FORM_ref4
495+
- Attribute: DW_AT_name
496+
Form: DW_FORM_string
469497
debug_info:
470498
- Version: 4
471499
AddrSize: 8
@@ -494,6 +522,10 @@ TEST(DWARFDIETest, TestDWARFTypePrinter) {
494522
- AbbrCode: 0x7
495523
Values:
496524
- Value: 0x0000000c # update
525+
- AbbrCode: 0x8
526+
Values:
527+
- Value: 0x0000000c
528+
- CStr: my_int
497529
- AbbrCode: 0x0
498530
- AbbrCode: 0x0)";
499531
YAMLModuleTester t(yamldata);
@@ -505,17 +537,7 @@ TEST(DWARFDIETest, TestDWARFTypePrinter) {
505537
unit->Dump(&debug_os);
506538
ASSERT_TRUE(unit);
507539

508-
DWARFDIE t1_die = unit->GetDIE(0x11);
509-
std::string template_name;
510-
llvm::raw_string_ostream template_name_os(template_name);
511-
llvm::DWARFTypePrinter<DWARFDIE> template_name_printer(template_name_os);
512-
template_name_printer.appendAndTerminateTemplateParameters(t1_die);
513-
EXPECT_THAT(template_name, "<t3<int> >");
514-
515-
DWARFDIE t2_die = unit->GetDIE(0x1a);
516-
std::string qualified_name;
517-
llvm::raw_string_ostream qualified_name_os(qualified_name);
518-
llvm::DWARFTypePrinter<DWARFDIE> qualified_name_printer(qualified_name_os);
519-
qualified_name_printer.appendQualifiedName(t2_die);
520-
EXPECT_THAT(qualified_name, "t1<t3<int> >::t2");
540+
Test_appendAndTerminateTemplateParameters(unit->GetDIE(0x11), "<t3<int> >");
541+
Test_appendQualifiedName(unit->GetDIE(0x1a), "t1<t3<int> >::t2");
542+
Test_appendQualifiedName(unit->GetDIE(0x28), "t3<int>::my_int");
521543
}

llvm/include/llvm/DebugInfo/DWARF/DWARFTypePrinter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ template <typename DieType> struct DWARFTypePrinter {
7070
case dwarf::DW_TAG_union_type:
7171
case dwarf::DW_TAG_namespace:
7272
case dwarf::DW_TAG_enumeration_type:
73+
case dwarf::DW_TAG_typedef:
7374
return true;
7475
default:
7576
break;

0 commit comments

Comments
 (0)