diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp index 7fc1d70898d1d..4f79c8aa3f811 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -163,8 +163,9 @@ static bool TagIsRecordType(dw_tag_t tag) { /// a default DWARFDIE. If \c containing_decl_ctx is not a valid /// C++ declaration context for class methods, assume no object /// parameter exists for the given \c subprogram. -static DWARFDIE GetCXXObjectParameter(const DWARFDIE &subprogram, - const DWARFDIE &decl_ctx_die) { +DWARFDIE +DWARFASTParserClang::GetCXXObjectParameter(const DWARFDIE &subprogram, + const DWARFDIE &decl_ctx_die) { assert(subprogram); assert(subprogram.Tag() == DW_TAG_subprogram || subprogram.Tag() == DW_TAG_inlined_subroutine || diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.h index 3994726aa6b3e..111604ce4068a 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.h @@ -112,6 +112,10 @@ class DWARFASTParserClang : public lldb_private::plugin::dwarf::DWARFASTParser { void MapDeclDIEToDefDIE(const lldb_private::plugin::dwarf::DWARFDIE &decl_die, const lldb_private::plugin::dwarf::DWARFDIE &def_die); + lldb_private::plugin::dwarf::DWARFDIE GetCXXObjectParameter( + const lldb_private::plugin::dwarf::DWARFDIE &subprogram, + const lldb_private::plugin::dwarf::DWARFDIE &decl_ctx_die); + protected: /// Protected typedefs and members. /// @{ diff --git a/lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp b/lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp index 6c77736113da3..2d4b79fed4a55 100644 --- a/lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp +++ b/lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp @@ -889,18 +889,32 @@ TEST_F(DWARFASTParserClangTests, TestParseDWARFAttributes_ObjectPointer) { ASSERT_TRUE(context_die.IsValid()); ASSERT_EQ(context_die.Tag(), DW_TAG_structure_type); - auto subprogram_definition = context_die.GetSibling(); - ASSERT_TRUE(subprogram_definition.IsValid()); - ASSERT_EQ(subprogram_definition.Tag(), DW_TAG_subprogram); - ASSERT_FALSE(subprogram_definition.GetAttributeValueAsOptionalUnsigned( - DW_AT_external)); - - auto param_die = subprogram_definition.GetFirstChild(); - ASSERT_TRUE(param_die.IsValid()); - - ParsedDWARFTypeAttributes attrs(subprogram_definition); - EXPECT_TRUE(attrs.object_pointer.IsValid()); - EXPECT_EQ(attrs.object_pointer, param_die); + { + auto decl_die = context_die.GetFirstChild(); + ASSERT_TRUE(decl_die.IsValid()); + ASSERT_EQ(decl_die.Tag(), DW_TAG_subprogram); + ASSERT_TRUE(decl_die.GetAttributeValueAsOptionalUnsigned(DW_AT_external)); + + auto param_die = decl_die.GetFirstChild(); + ASSERT_TRUE(param_die.IsValid()); + + EXPECT_EQ(param_die, + ast_parser.GetCXXObjectParameter(decl_die, context_die)); + } + + { + auto subprogram_definition = context_die.GetSibling(); + ASSERT_TRUE(subprogram_definition.IsValid()); + ASSERT_EQ(subprogram_definition.Tag(), DW_TAG_subprogram); + ASSERT_FALSE(subprogram_definition.GetAttributeValueAsOptionalUnsigned( + DW_AT_external)); + + auto param_die = subprogram_definition.GetFirstChild(); + ASSERT_TRUE(param_die.IsValid()); + + EXPECT_EQ(param_die, ast_parser.GetCXXObjectParameter(subprogram_definition, + context_die)); + } } TEST_F(DWARFASTParserClangTests, TestParseSubroutine_ExplicitObjectParameter) {