[Lldb-commits] [lldb] [lldb] Fix "exact match" debug_names type queries (PR #118465)
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Tue Dec 3 02:40:34 PST 2024
https://github.com/labath created https://github.com/llvm/llvm-project/pull/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.
>From 19f947f2a32e9edaceb05e7bbfbb101fe353362a Mon Sep 17 00:00:00 2001
From: Pavel Labath <pavel at labath.sk>
Date: Tue, 3 Dec 2024 11:34:58 +0100
Subject: [PATCH] [lldb] Fix "exact match" debug_names type queries
.. 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.
---
.../Plugins/SymbolFile/DWARF/DebugNamesDWARFIndex.cpp | 2 +-
lldb/test/Shell/SymbolFile/DWARF/x86/find-basic-type.cpp | 8 ++++++++
2 files changed, 9 insertions(+), 1 deletion(-)
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