-
Notifications
You must be signed in to change notification settings - Fork 15.4k
[lldb][Commands][NFC] image lookup: remove unused local variable #146554
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[lldb][Commands][NFC] image lookup: remove unused local variable #146554
Conversation
…module
The `current_module` pointer here was never set, but we check it when
looping over the `target_modules` list. Presumably the intention was to
avoid calling `LookupInModule` if we already found the type in the
current module. This only affects `image lookup --all`.
This patch sets `current_module` if we successfully completed a lookup
into it.
Before:
```
(lldb) im loo -vt Foo --all
Best match found in /Users/jonas/Git/llvm-worktrees/llvm-project/a.out:
id = {0x00000037}, name = "Foo", byte-size = 1, decl = foo.cpp:1, compiler_type = "struct Foo {
}"
1 match found in /Users/jonas/Git/llvm-worktrees/llvm-project/a.out:
id = {0x00000037}, name = "Foo", byte-size = 1, decl = foo.cpp:1, compiler_type = "struct Foo {
}"
```
After:
```
(lldb) im loo -vt Foo --all
Best match found in /Users/jonas/Git/llvm-worktrees/llvm-project/a.out:
id = {0x00000037}, name = "Foo", byte-size = 1, decl = foo.cpp:1, compiler_type = "struct Foo {
}"
```
|
@llvm/pr-subscribers-lldb Author: Michael Buch (Michael137) ChangesThe This patch sets Before: After: Full diff: https://github.com/llvm/llvm-project/pull/146554.diff 2 Files Affected:
diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp
index a4ced37649ea0..97ed2bab802c8 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -3946,8 +3946,8 @@ class CommandObjectTargetModulesLookup : public CommandObjectParsed {
Options *GetOptions() override { return &m_options; }
- bool LookupHere(CommandInterpreter &interpreter, CommandReturnObject &result,
- bool &syntax_error) {
+ ModuleSP LookupHere(CommandInterpreter &interpreter,
+ CommandReturnObject &result, bool &syntax_error) {
switch (m_options.m_type) {
case eLookupTypeAddress:
case eLookupTypeFileLine:
@@ -3955,7 +3955,7 @@ class CommandObjectTargetModulesLookup : public CommandObjectParsed {
case eLookupTypeFunctionOrSymbol:
case eLookupTypeSymbol:
default:
- return false;
+ return nullptr;
case eLookupTypeType:
break;
}
@@ -3963,29 +3963,29 @@ class CommandObjectTargetModulesLookup : public CommandObjectParsed {
StackFrameSP frame = m_exe_ctx.GetFrameSP();
if (!frame)
- return false;
+ return nullptr;
const SymbolContext &sym_ctx(frame->GetSymbolContext(eSymbolContextModule));
if (!sym_ctx.module_sp)
- return false;
+ return nullptr;
switch (m_options.m_type) {
default:
- return false;
+ return nullptr;
case eLookupTypeType:
if (!m_options.m_str.empty()) {
if (LookupTypeHere(&GetTarget(), m_interpreter,
result.GetOutputStream(), *sym_ctx.module_sp,
m_options.m_str.c_str(), m_options.m_use_regex)) {
result.SetStatus(eReturnStatusSuccessFinishResult);
- return true;
+ return sym_ctx.module_sp;
}
}
break;
}
- return false;
+ return nullptr;
}
bool LookupInModule(CommandInterpreter &interpreter, Module *module,
@@ -4086,12 +4086,12 @@ class CommandObjectTargetModulesLookup : public CommandObjectParsed {
// Dump all sections for all modules images
if (command.GetArgumentCount() == 0) {
- ModuleSP current_module;
-
// Where it is possible to look in the current symbol context first,
// try that. If this search was successful and --all was not passed,
// don't print anything else.
- if (LookupHere(m_interpreter, result, syntax_error)) {
+ ModuleSP current_module_sp =
+ LookupHere(m_interpreter, result, syntax_error);
+ if (current_module_sp) {
result.GetOutputStream().EOL();
num_successful_lookups++;
if (!m_options.m_print_all) {
@@ -4110,7 +4110,7 @@ class CommandObjectTargetModulesLookup : public CommandObjectParsed {
}
for (ModuleSP module_sp : target_modules.ModulesNoLocking()) {
- if (module_sp != current_module &&
+ if (module_sp != current_module_sp &&
LookupInModule(m_interpreter, module_sp.get(), result,
syntax_error)) {
result.GetOutputStream().EOL();
diff --git a/lldb/test/Shell/Commands/command-image-lookup-current-module.test b/lldb/test/Shell/Commands/command-image-lookup-current-module.test
new file mode 100644
index 0000000000000..52eec1c2b37f3
--- /dev/null
+++ b/lldb/test/Shell/Commands/command-image-lookup-current-module.test
@@ -0,0 +1,43 @@
+# REQUIRES: system-darwin
+
+# RUN: split-file %s %t
+# RUN: %clang_host -g -gdwarf %t/lib1.cpp -shared -o %t-lib1.dylib
+# RUN: %clang_host -g -gdwarf %t/lib2.cpp -shared -o %t-lib2.dylib
+# RUN: %clang_host -g -gdwarf %t/main.cpp %t-lib1.dylib %t-lib2.dylib -o %t.out
+# RUN: %lldb -x -b -s %t/commands.input %t.out -o exit 2>&1 \
+# RUN: | FileCheck %s
+
+#--- main.cpp
+
+struct Foo {} f;
+
+int main() { __builtin_debugtrap(); }
+
+#--- lib1.cpp
+
+struct Foo {} f1;
+
+#--- lib2.cpp
+
+struct Foo {} f2;
+
+#--- commands.input
+
+run
+target modules lookup --type Foo
+
+# CHECK: (lldb) target modules lookup --type Foo
+# CHECK-NEXT: Best match found in
+# CHECK-NEXT: name = "Foo"
+
+# Confirm we only dumped the match once.
+# CHECK-NOT: name = "Foo"
+
+target modules lookup --type Foo --all
+
+# CHECK: (lldb) target modules lookup --type Foo --all
+# CHECK-NEXT: Best match found in
+# CHECK-NEXT: name = "Foo"
+
+# CHECK: 1 match found in {{.*}}lib1.dylib
+# CHECK: 1 match found in {{.*}}lib2.dylib
|
The
current_modulepointer here was never set, but we check it when looping over thetarget_moduleslist. Presumably the intention was to avoid callingLookupInModuleif we already found the type in the current module. This patch removes thiscurrent_module. If we decide the output below is not what the user should see, we can revisit the implementation.Current output:
which seems fine.
Note, there can be multiple matches within the current module, so if we did the naive thing of skipping the
current_modulewhen printing with--all, then we would miss some matches.