ソースを参照

Fix short option error (#4796)

"unsigned char" prints as an integer, not a char

---------

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
Jon Ross-Perkins 1 年間 前
コミット
a3e66d6116
2 ファイル変更6 行追加1 行削除
  1. 2 1
      common/command_line.cpp
  2. 4 0
      common/command_line_test.cpp

+ 2 - 1
common/command_line.cpp

@@ -1039,7 +1039,8 @@ auto Parser::ParseShortOptionSeq(llvm::StringRef unparsed_arg)
     auto* arg_entry =
         (c < short_option_table_.size()) ? short_option_table_[c] : nullptr;
     if (!arg_entry) {
-      return Error(llvm::formatv("unknown short option `{0}`", c));
+      return Error(
+          llvm::formatv("unknown short option `-{0}`", static_cast<char>(c)));
     }
     // Mark this argument as parsed.
     arg_entry->setInt(true);

+ 4 - 0
common/command_line_test.cpp

@@ -188,6 +188,10 @@ TEST(ArgParserTest, ShortArgs) {
   EXPECT_THAT(integer_option, Eq(123));
 
   TestRawOstream os;
+
+  EXPECT_THAT(parse({"-v"}, os), IsError(StrEq("unknown short option `-v`")));
+  EXPECT_THAT(parse({"-xvx"}, os), IsError(StrEq("unknown short option `-v`")));
+
   EXPECT_THAT(
       parse({"-xzf"}, os),
       IsError(StrEq("option `-z` (short for `--option2`) requires a value to "