[Lldb-commits] [lldb] a8bec61 - [lldb] Fix that empty target.run-args are not actually used when launching process
Raphael Isemann via lldb-commits
lldb-commits at lists.llvm.org
Fri Nov 18 07:49:06 PST 2022
Author: Raphael Isemann
Date: 2022-11-18T16:48:56+01:00
New Revision: a8bec6117998cd4a9ff6798381cd0df9c9edb982
URL: https://github.com/llvm/llvm-project/commit/a8bec6117998cd4a9ff6798381cd0df9c9edb982
DIFF: https://github.com/llvm/llvm-project/commit/a8bec6117998cd4a9ff6798381cd0df9c9edb982.diff
LOG: [lldb] Fix that empty target.run-args are not actually used when launching process
`GetPropertyAtIndexAsArgs` returns true on success and false on failure. Right
now it returns the converted `size_t` returned from `GetArgs` which describes
the number of arguments in the argument list. So for empty argument lists
(`(size_t)0` -> `(bool)false`) this function always fails.
The only observable effect of this seems to be that empty arguments are never
propagated to the internal LaunchInfo for a process. This causes that once any
argument has been added to `target.run-args`, clearing `target.run-args` doesn't
have any effect.
Fixes issue #55568
Reviewed By: JDevlieghere, jingham
Differential Revision: https://reviews.llvm.org/D126057
Added:
Modified:
lldb/source/Interpreter/OptionValueProperties.cpp
lldb/test/API/python_api/target/TestTargetAPI.py
Removed:
################################################################################
diff --git a/lldb/source/Interpreter/OptionValueProperties.cpp b/lldb/source/Interpreter/OptionValueProperties.cpp
index c2c13ba97baa..62590bb18869 100644
--- a/lldb/source/Interpreter/OptionValueProperties.cpp
+++ b/lldb/source/Interpreter/OptionValueProperties.cpp
@@ -248,16 +248,22 @@ bool OptionValueProperties::GetPropertyAtIndexAsArgs(
return false;
const OptionValueArgs *arguments = value->GetAsArgs();
- if (arguments)
- return arguments->GetArgs(args);
+ if (arguments) {
+ arguments->GetArgs(args);
+ return true;
+ }
const OptionValueArray *array = value->GetAsArray();
- if (array)
- return array->GetArgs(args);
+ if (array) {
+ array->GetArgs(args);
+ return true;
+ }
const OptionValueDictionary *dict = value->GetAsDictionary();
- if (dict)
- return dict->GetArgs(args);
+ if (dict) {
+ dict->GetArgs(args);
+ return true;
+ }
return false;
}
diff --git a/lldb/test/API/python_api/target/TestTargetAPI.py b/lldb/test/API/python_api/target/TestTargetAPI.py
index 0b2514416bed..f1a379bc2f30 100644
--- a/lldb/test/API/python_api/target/TestTargetAPI.py
+++ b/lldb/test/API/python_api/target/TestTargetAPI.py
@@ -191,6 +191,15 @@ def test_launch_simple(self):
self.assertIn('arg: foo', output)
self.assertIn('env: bar=baz', output)
+ # Clear all the run args set above.
+ self.runCmd("setting clear target.run-args")
+ process = target.LaunchSimple(None, None,
+ self.get_process_working_directory())
+ process.Continue()
+ self.assertEqual(process.GetState(), lldb.eStateExited)
+ output = process.GetSTDOUT(9999)
+ self.assertNotIn('arg: foo', output)
+
self.runCmd("settings set target.disable-stdio true")
process = target.LaunchSimple(
None, None, self.get_process_working_directory())
More information about the lldb-commits
mailing list