Skip to content

Commit

Permalink
Fix GetDIEForDeclContext so it only returns entries matching the prov…
Browse files Browse the repository at this point in the history
…ided context

Currently, we return all the entries such that their decl_ctx pointer >= decl_ctx provided.
Instead, we should return only the ones that decl_ctx pointer == decl_ctx provided.

Differential Revision: https://reviews.llvm.org/D66357
Patch by Guilherme Andrade <guiandrade@google.com>.

llvm-svn: 370374
  • Loading branch information
labath committed Aug 29, 2019
1 parent ef82098 commit f07b4af
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 3 deletions.
7 changes: 4 additions & 3 deletions lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
Expand Up @@ -2186,9 +2186,10 @@ bool DWARFASTParserClang::CompleteTypeFromDWARF(const DWARFDIE &die,
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;
}
Expand Down
1 change: 1 addition & 0 deletions lldb/unittests/SymbolFile/DWARF/CMakeLists.txt
@@ -1,4 +1,5 @@
add_lldb_unittest(SymbolFileDWARFTests
DWARFASTParserClangTests.cpp
SymbolFileDWARFTests.cpp

LINK_LIBS
Expand Down
47 changes: 47 additions & 0 deletions 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]);
}

0 comments on commit f07b4af

Please sign in to comment.