Author: Mingming Liu Date: 2023-11-10T11:40:44-08:00 New Revision: 47ee4f6561fd24615b4d77a0d87b863f9c7eb87a
URL: https://github.com/llvm/llvm-project/commit/47ee4f6561fd24615b4d77a0d87b863f9c7eb87a DIFF: https://github.com/llvm/llvm-project/commit/47ee4f6561fd24615b4d77a0d87b863f9c7eb87a.diff LOG: Revert "[Support]Look up in top-level subcommand as a fallback when looking options for a custom subcommand. (#71776)" This reverts commit b88308b1b4813e55ce8f54ceff6e57736328fb58. Added: Modified: llvm/lib/Support/CommandLine.cpp llvm/unittests/Support/CommandLineTest.cpp Removed: ################################################################################ diff --git a/llvm/lib/Support/CommandLine.cpp b/llvm/lib/Support/CommandLine.cpp index a7e0cae8b855d7c..55633d7cafa4791 100644 --- a/llvm/lib/Support/CommandLine.cpp +++ b/llvm/lib/Support/CommandLine.cpp @@ -1667,13 +1667,6 @@ bool CommandLineParser::ParseCommandLineOptions(int argc, Handler = LookupLongOption(*ChosenSubCommand, ArgName, Value, LongOptionsUseDoubleDash, HaveDoubleDash); - // If Handler is not found in a specialized subcommand, look up handler - // in the top-level subcommand. - // cl::opt without cl::sub belongs to top-level subcommand. - if (!Handler && ChosenSubCommand != &SubCommand::getTopLevel()) - Handler = LookupLongOption(SubCommand::getTopLevel(), ArgName, Value, - LongOptionsUseDoubleDash, HaveDoubleDash); - // Check to see if this "option" is really a prefixed or grouped argument. if (!Handler && !(LongOptionsUseDoubleDash && HaveDoubleDash)) Handler = HandlePrefixedOrGroupedOption(ArgName, Value, ErrorParsing, diff --git a/llvm/unittests/Support/CommandLineTest.cpp b/llvm/unittests/Support/CommandLineTest.cpp index 4411ed0f83928ad..41cc8260acfedf7 100644 --- a/llvm/unittests/Support/CommandLineTest.cpp +++ b/llvm/unittests/Support/CommandLineTest.cpp @@ -525,59 +525,6 @@ TEST(CommandLineTest, LookupFailsInWrongSubCommand) { EXPECT_FALSE(Errs.empty()); } -TEST(CommandLineTest, TopLevelOptInSubcommand) { - enum LiteralOptionEnum { - foo, - bar, - baz, - }; - - cl::ResetCommandLineParser(); - - // This is a top-level option and not associated with a subcommand. - // A command line using subcommand should parse both subcommand options and - // top-level options. A valid use case is that users of llvm command line - // tools should be able to specify top-level options defined in any library. - cl::opt<std::string> TopLevelOpt("str", cl::init("txt"), - cl::desc("A top-level option.")); - - StackSubCommand SC("sc", "Subcommand"); - StackOption<std::string> PositionalOpt( - cl::Positional, cl::desc("positional argument test coverage"), - cl::sub(SC)); - StackOption<LiteralOptionEnum> LiteralOpt( - cl::desc("literal argument test coverage"), cl::sub(SC), cl::init(bar), - cl::values(clEnumVal(foo, "foo"), clEnumVal(bar, "bar"), - clEnumVal(baz, "baz"))); - StackOption<bool> EnableOpt("enable", cl::sub(SC), cl::init(false)); - StackOption<int> ThresholdOpt("threshold", cl::sub(SC), cl::init(1)); - - const char *PositionalOptVal = "input-file"; - const char *args[] = {"prog", "sc", PositionalOptVal, - "-enable", "--str=csv", "--threshold=2"}; - - // cl::ParseCommandLineOptions returns true on success. Otherwise, it will - // print the error message to stderr and exit in this setting (`Errs` ostream - // is not set). - ASSERT_TRUE(cl::ParseCommandLineOptions(sizeof(args) / sizeof(args[0]), args, - StringRef())); - EXPECT_STREQ(PositionalOpt.getValue().c_str(), PositionalOptVal); - EXPECT_TRUE(EnableOpt); - // Tests that the value of `str` option is `csv` as specified. - EXPECT_STREQ(TopLevelOpt.getValue().c_str(), "csv"); - EXPECT_EQ(ThresholdOpt, 2); - - for (auto &[LiteralOptVal, WantLiteralOpt] : - {std::pair{"--bar", bar}, {"--foo", foo}, {"--baz", baz}}) { - const char *args[] = {"prog", "sc", LiteralOptVal}; - ASSERT_TRUE(cl::ParseCommandLineOptions(sizeof(args) / sizeof(args[0]), - args, StringRef())); - - // Tests that literal options are parsed correctly. - EXPECT_EQ(LiteralOpt, WantLiteralOpt); - } -} - TEST(CommandLineTest, AddToAllSubCommands) { cl::ResetCommandLineParser(); _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits