Author: Alex Langford Date: 2023-03-07T11:29:27-08:00 New Revision: ca8faf8f465962e5c39d145a0e2236648cbcc27d
URL: https://github.com/llvm/llvm-project/commit/ca8faf8f465962e5c39d145a0e2236648cbcc27d DIFF: https://github.com/llvm/llvm-project/commit/ca8faf8f465962e5c39d145a0e2236648cbcc27d.diff LOG: [lldb] Respect empty arguments in target.run-args Currently empty arguments are not respected. They are silently dropped in two places: (1) when extracting them from the target.run-args setting and (2) when constructing the lldb-argdumper invocation. (1) is actually a regression from a few years ago. We did not always drop empty arguments. See 31d97a5c8ab78c619deada0cdb1fcf64021d25dd. rdar://106279228 Differential Revision: https://reviews.llvm.org/D145450 Added: lldb/test/Shell/Driver/Inputs/dumpargs.c lldb/test/Shell/Driver/TestEmptyArgument.test Modified: lldb/source/Host/common/ProcessLaunchInfo.cpp lldb/source/Interpreter/OptionValueArgs.cpp Removed: ################################################################################ diff --git a/lldb/source/Host/common/ProcessLaunchInfo.cpp b/lldb/source/Host/common/ProcessLaunchInfo.cpp index af278cc1a03c3..8e09601b5715b 100644 --- a/lldb/source/Host/common/ProcessLaunchInfo.cpp +++ b/lldb/source/Host/common/ProcessLaunchInfo.cpp @@ -321,6 +321,8 @@ bool ProcessLaunchInfo::ConvertArgumentsForLaunchingInShell( } else { for (size_t i = 0; argv[i] != nullptr; ++i) { std::string safe_arg = Args::GetShellSafeArgument(m_shell, argv[i]); + if (safe_arg.empty()) + safe_arg = "\"\""; // Add a space to separate this arg from the previous one. shell_command.PutCString(" "); shell_command.PutCString(safe_arg); diff --git a/lldb/source/Interpreter/OptionValueArgs.cpp b/lldb/source/Interpreter/OptionValueArgs.cpp index bdb5f486835a6..0e20154907b02 100644 --- a/lldb/source/Interpreter/OptionValueArgs.cpp +++ b/lldb/source/Interpreter/OptionValueArgs.cpp @@ -17,8 +17,7 @@ size_t OptionValueArgs::GetArgs(Args &args) const { args.Clear(); for (const auto &value : m_values) { llvm::StringRef string_value = value->GetStringValue(); - if (!string_value.empty()) - args.AppendArgument(string_value); + args.AppendArgument(string_value); } return args.GetArgumentCount(); diff --git a/lldb/test/Shell/Driver/Inputs/dumpargs.c b/lldb/test/Shell/Driver/Inputs/dumpargs.c new file mode 100644 index 0000000000000..5f0e6a4cb01d0 --- /dev/null +++ b/lldb/test/Shell/Driver/Inputs/dumpargs.c @@ -0,0 +1,8 @@ +#include <stdio.h> + +int main(int argc, char *argv[]) { + for (int i = 0; i < argc; i++) { + printf("argv[%d] = \"%s\"\n", i, argv[i]); + } + return 0; +} diff --git a/lldb/test/Shell/Driver/TestEmptyArgument.test b/lldb/test/Shell/Driver/TestEmptyArgument.test new file mode 100644 index 0000000000000..ff327bdd38d01 --- /dev/null +++ b/lldb/test/Shell/Driver/TestEmptyArgument.test @@ -0,0 +1,7 @@ +# RUN: %clang_host %S/Inputs/dumpargs.c -o %t.out +# RUN: %lldb -b -o "r" %t.out -- "one" "two" "" "three" | FileCheck %s + +# CHECK: argv[1] = "one" +# CHECK: argv[2] = "two" +# CHECK: argv[3] = "" +# CHECK: argv[4] = "three" _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits