[Lldb-commits] [lldb] 8c749ff - [lldb] Fix "exact match" debug_names type queries (#118465)
via lldb-commits
lldb-commits at lists.llvm.org
Tue Dec 3 06:19:03 PST 2024
Author: Pavel Labath
Date: 2024-12-03T15:18:59+01:00
New Revision: 8c749ff8aa787049cea4d4f7331493ee17565344
URL: https://github.com/llvm/llvm-project/commit/8c749ff8aa787049cea4d4f7331493ee17565344
DIFF: https://github.com/llvm/llvm-project/commit/8c749ff8aa787049cea4d4f7331493ee17565344.diff
LOG: [lldb] Fix "exact match" debug_names type queries (#118465)
.. in the global namespace
The problem was the interaction of #116989 with an optimization in
GetTypesWithQuery. The optimization was only correct for non-exact
matches, but that didn't matter before this PR due to the "second layer
of defense". After that was removed, the query started returning more
types than it should.
Added:
Modified:
lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
lldb/test/Shell/SymbolFile/DWARF/x86/find-basic-type.cpp
Removed:
################################################################################
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
index 6f2cb455ec00e1..c71c2dd47344a7 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp
@@ -527,7 +527,7 @@ void DebugNamesDWARFIndex::GetTypesWithQuery(
ConstString name = query.GetTypeBasename();
std::vector<lldb_private::CompilerContext> query_context =
query.GetContextRef();
- if (query_context.size() <= 1)
+ if (query_context.size() <= 1 && !query.GetExactMatch())
return GetTypes(name, callback);
llvm::SmallVector<CompilerContext> parent_contexts =
diff --git a/lldb/test/Shell/SymbolFile/DWARF/x86/find-basic-type.cpp b/lldb/test/Shell/SymbolFile/DWARF/x86/find-basic-type.cpp
index 2ed7b219d8da35..af49206608723a 100644
--- a/lldb/test/Shell/SymbolFile/DWARF/x86/find-basic-type.cpp
+++ b/lldb/test/Shell/SymbolFile/DWARF/x86/find-basic-type.cpp
@@ -4,6 +4,8 @@
// RUN: ld.lld %t.o -o %t
// RUN: lldb-test symbols --name=foo --find=type %t | \
// RUN: FileCheck --check-prefix=NAME %s
+// RUN: lldb-test symbols --name=::foo --find=type %t | \
+// RUN: FileCheck --check-prefix=EXACT %s
// RUN: lldb-test symbols --name=foo --context=context --find=type %t | \
// RUN: FileCheck --check-prefix=CONTEXT %s
// RUN: lldb-test symbols --name=not_there --find=type %t | \
@@ -12,6 +14,8 @@
// RUN: %clang %s -g -c -o %t --target=x86_64-apple-macosx
// RUN: lldb-test symbols --name=foo --find=type %t | \
// RUN: FileCheck --check-prefix=NAME %s
+// RUN: lldb-test symbols --name=::foo --find=type %t | \
+// RUN: FileCheck --check-prefix=EXACT %s
// RUN: lldb-test symbols --name=foo --context=context --find=type %t | \
// RUN: FileCheck --check-prefix=CONTEXT %s
// RUN: lldb-test symbols --name=not_there --find=type %t | \
@@ -22,6 +26,8 @@
// RUN: llvm-readobj --sections %t | FileCheck %s --check-prefix NAMES
// RUN: lldb-test symbols --name=foo --find=type %t | \
// RUN: FileCheck --check-prefix=NAME %s
+// RUN: lldb-test symbols --name=::foo --find=type %t | \
+// RUN: FileCheck --check-prefix=EXACT %s
// RUN: lldb-test symbols --name=foo --context=context --find=type %t | \
// RUN: FileCheck --check-prefix=CONTEXT %s
// RUN: lldb-test symbols --name=not_there --find=type %t | \
@@ -31,9 +37,11 @@
// EMPTY: Found 0 types:
// NAME: Found 4 types:
+// EXACT: Found 1 types:
// CONTEXT: Found 1 types:
struct foo { };
// NAME-DAG: name = "foo", {{.*}} decl = find-basic-type.cpp:[[@LINE-1]]
+// EXACT-DAG: name = "foo", {{.*}} decl = find-basic-type.cpp:[[@LINE-2]]
namespace bar {
int context;
More information about the lldb-commits
mailing list