guiandrade updated this revision to Diff 216166. guiandrade marked 3 inline comments as done. guiandrade added a comment.
I'm fixing the style issues pointed by @labath, but I acknowledge the flakiness of this test the way it is right now and am open to deleting it. I can also try to spend some time trying to implement it in a more proper manner. It's your call, @clayborg. Thanks! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D66357/new/ https://reviews.llvm.org/D66357 Files: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp lldb/unittests/SymbolFile/DWARF/CMakeLists.txt lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp Index: lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp =================================================================== --- /dev/null +++ lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp @@ -0,0 +1,47 @@ +//===-- DWARFASTParserClangTests.cpp ----------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" + +#include "Plugins/SymbolFile/DWARF/DWARFASTParserClang.h" +#include "Plugins/SymbolFile/DWARF/DWARFDIE.h" + +using namespace lldb; +using namespace lldb_private; + +namespace { +class DWARFASTParserClangStub : public DWARFASTParserClang { +public: + using DWARFASTParserClang::DWARFASTParserClang; + using DWARFASTParserClang::LinkDeclContextToDIE; +}; +} // namespace + +// If your implementation needs to dereference the dummy pointers we are +// defining here, causing this test to fail, feel free to delete it. +TEST(DWARFASTParserClangTests, + TestGetDIEForDeclContextReturnsOnlyMatchingEntries) { + ClangASTContext ast_ctx; + DWARFASTParserClangStub ast_parser(ast_ctx); + + DWARFUnit *unit = nullptr; + DWARFDIE die1(unit, (DWARFDebugInfoEntry *)1LL); + DWARFDIE die2(unit, (DWARFDebugInfoEntry *)2LL); + DWARFDIE die3(unit, (DWARFDebugInfoEntry *)3LL); + DWARFDIE die4(unit, (DWARFDebugInfoEntry *)4LL); + ast_parser.LinkDeclContextToDIE((clang::DeclContext *)1LL, die1); + ast_parser.LinkDeclContextToDIE((clang::DeclContext *)2LL, die2); + ast_parser.LinkDeclContextToDIE((clang::DeclContext *)2LL, die3); + ast_parser.LinkDeclContextToDIE((clang::DeclContext *)3LL, die4); + + auto die_list = ast_parser.GetDIEForDeclContext( + CompilerDeclContext(nullptr, (clang::DeclContext *)2LL)); + ASSERT_EQ(2u, die_list.size()); + ASSERT_EQ(die2, die_list[0]); + ASSERT_EQ(die3, die_list[1]); +} Index: lldb/unittests/SymbolFile/DWARF/CMakeLists.txt =================================================================== --- lldb/unittests/SymbolFile/DWARF/CMakeLists.txt +++ lldb/unittests/SymbolFile/DWARF/CMakeLists.txt @@ -1,4 +1,5 @@ add_lldb_unittest(SymbolFileDWARFTests + DWARFASTParserClangTests.cpp SymbolFileDWARFTests.cpp LINK_LIBS Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -2183,9 +2183,10 @@ std::vector<DWARFDIE> DWARFASTParserClang::GetDIEForDeclContext( lldb_private::CompilerDeclContext decl_context) { std::vector<DWARFDIE> result; - for (auto it = m_decl_ctx_to_die.find( - (clang::DeclContext *)decl_context.GetOpaqueDeclContext()); - it != m_decl_ctx_to_die.end(); it++) + auto opaque_decl_ctx = + (clang::DeclContext *)decl_context.GetOpaqueDeclContext(); + for (auto it = m_decl_ctx_to_die.find(opaque_decl_ctx); + it != m_decl_ctx_to_die.end() && it->first == opaque_decl_ctx; it++) result.push_back(it->second); return result; }
Index: lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp =================================================================== --- /dev/null +++ lldb/unittests/SymbolFile/DWARF/DWARFASTParserClangTests.cpp @@ -0,0 +1,47 @@ +//===-- DWARFASTParserClangTests.cpp ----------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" + +#include "Plugins/SymbolFile/DWARF/DWARFASTParserClang.h" +#include "Plugins/SymbolFile/DWARF/DWARFDIE.h" + +using namespace lldb; +using namespace lldb_private; + +namespace { +class DWARFASTParserClangStub : public DWARFASTParserClang { +public: + using DWARFASTParserClang::DWARFASTParserClang; + using DWARFASTParserClang::LinkDeclContextToDIE; +}; +} // namespace + +// If your implementation needs to dereference the dummy pointers we are +// defining here, causing this test to fail, feel free to delete it. +TEST(DWARFASTParserClangTests, + TestGetDIEForDeclContextReturnsOnlyMatchingEntries) { + ClangASTContext ast_ctx; + DWARFASTParserClangStub ast_parser(ast_ctx); + + DWARFUnit *unit = nullptr; + DWARFDIE die1(unit, (DWARFDebugInfoEntry *)1LL); + DWARFDIE die2(unit, (DWARFDebugInfoEntry *)2LL); + DWARFDIE die3(unit, (DWARFDebugInfoEntry *)3LL); + DWARFDIE die4(unit, (DWARFDebugInfoEntry *)4LL); + ast_parser.LinkDeclContextToDIE((clang::DeclContext *)1LL, die1); + ast_parser.LinkDeclContextToDIE((clang::DeclContext *)2LL, die2); + ast_parser.LinkDeclContextToDIE((clang::DeclContext *)2LL, die3); + ast_parser.LinkDeclContextToDIE((clang::DeclContext *)3LL, die4); + + auto die_list = ast_parser.GetDIEForDeclContext( + CompilerDeclContext(nullptr, (clang::DeclContext *)2LL)); + ASSERT_EQ(2u, die_list.size()); + ASSERT_EQ(die2, die_list[0]); + ASSERT_EQ(die3, die_list[1]); +} Index: lldb/unittests/SymbolFile/DWARF/CMakeLists.txt =================================================================== --- lldb/unittests/SymbolFile/DWARF/CMakeLists.txt +++ lldb/unittests/SymbolFile/DWARF/CMakeLists.txt @@ -1,4 +1,5 @@ add_lldb_unittest(SymbolFileDWARFTests + DWARFASTParserClangTests.cpp SymbolFileDWARFTests.cpp LINK_LIBS Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -2183,9 +2183,10 @@ std::vector<DWARFDIE> DWARFASTParserClang::GetDIEForDeclContext( lldb_private::CompilerDeclContext decl_context) { std::vector<DWARFDIE> result; - for (auto it = m_decl_ctx_to_die.find( - (clang::DeclContext *)decl_context.GetOpaqueDeclContext()); - it != m_decl_ctx_to_die.end(); it++) + auto opaque_decl_ctx = + (clang::DeclContext *)decl_context.GetOpaqueDeclContext(); + for (auto it = m_decl_ctx_to_die.find(opaque_decl_ctx); + it != m_decl_ctx_to_die.end() && it->first == opaque_decl_ctx; it++) result.push_back(it->second); return result; }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits