[PATCH] D77242: [CommandLine] Fix cl::ConsumeAfter support with more than one positional argument
Yi-Hong Lyu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 1 17:27:08 PDT 2020
Yi-Hong.Lyu updated this revision to Diff 254367.
Yi-Hong.Lyu added a comment.
Address clang-tidy's warning and rename local variable for readability.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D77242/new/
https://reviews.llvm.org/D77242
Files:
llvm/lib/Support/CommandLine.cpp
llvm/unittests/Support/CommandLineTest.cpp
Index: llvm/unittests/Support/CommandLineTest.cpp
===================================================================
--- llvm/unittests/Support/CommandLineTest.cpp
+++ llvm/unittests/Support/CommandLineTest.cpp
@@ -1793,4 +1793,28 @@
clEnumValN(Val1, "bits-val1", "The Val1 value"),
clEnumValN(Val1, "bits-val2", "The Val2 value")));
+TEST(CommandLineTest, ConsumeAfterTwoPositionals) {
+ cl::ResetCommandLineParser();
+
+ // input1 input2 [args]
+ StackOption<std::string, cl::opt<std::string>> Input1(cl::Positional,
+ cl::Required);
+ StackOption<std::string, cl::opt<std::string>> Input2(cl::Positional,
+ cl::Required);
+ StackOption<std::string, cl::list<std::string>> ExtraArgs(cl::ConsumeAfter);
+
+ const char *Args[] = {"prog", "input1", "input2", "arg1", "arg2"};
+
+ std::string Errs;
+ raw_string_ostream OS(Errs);
+ EXPECT_TRUE(cl::ParseCommandLineOptions(5, Args, StringRef(), &OS));
+ OS.flush();
+ EXPECT_EQ("input1", Input1);
+ EXPECT_EQ("input2", Input2);
+ EXPECT_TRUE(ExtraArgs.size() == 2);
+ EXPECT_TRUE(ExtraArgs[0] == "arg1");
+ EXPECT_TRUE(ExtraArgs[1] == "arg2");
+ EXPECT_TRUE(Errs.empty());
+}
+
} // anonymous namespace
Index: llvm/lib/Support/CommandLine.cpp
===================================================================
--- llvm/lib/Support/CommandLine.cpp
+++ llvm/lib/Support/CommandLine.cpp
@@ -1581,9 +1581,9 @@
} else {
assert(ConsumeAfterOpt && NumPositionalRequired <= PositionalVals.size());
unsigned ValNo = 0;
- for (size_t j = 1, e = PositionalOpts.size(); j != e; ++j)
- if (RequiresValue(PositionalOpts[j])) {
- ErrorParsing |= ProvidePositionalOption(PositionalOpts[j],
+ for (size_t J = 0, E = PositionalOpts.size(); J != E; ++J)
+ if (RequiresValue(PositionalOpts[J])) {
+ ErrorParsing |= ProvidePositionalOption(PositionalOpts[J],
PositionalVals[ValNo].first,
PositionalVals[ValNo].second);
ValNo++;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D77242.254367.patch
Type: text/x-patch
Size: 2149 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200402/b72e0574/attachment.bin>
More information about the llvm-commits
mailing list