hintonda updated this revision to Diff 197271.
hintonda added a comment.
Herald added subscribers: cfe-commits, thopre.
Herald added a project: clang.
- Fix test.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D61270/new/
https://reviews.llvm.org/D61270
Files:
clang/test/Driver/clang-offload-bundler.c
llvm/include/llvm/Support/CommandLine.h
llvm/lib/Support/CommandLine.cpp
llvm/test/FileCheck/dump-input-enable.txt
llvm/test/Support/check-default-options.txt
llvm/test/tools/llvm-readobj/merged.test
Index: llvm/test/tools/llvm-readobj/merged.test
===================================================================
--- llvm/test/tools/llvm-readobj/merged.test
+++ llvm/test/tools/llvm-readobj/merged.test
@@ -10,4 +10,4 @@
RUN: not llvm-readobj -aeWhSrnudlVgIs %p/Inputs/trivial.obj.elf-i386 2>&1 | FileCheck %s --check-prefix=UNKNOWN
CHECK-NOT: Unknown command line argument
-UNKNOWN: Unknown command line argument
+UNKNOWN: for the --section-headers option: may only occur zero or one times!
Index: llvm/test/Support/check-default-options.txt
===================================================================
--- llvm/test/Support/check-default-options.txt
+++ llvm/test/Support/check-default-options.txt
@@ -1,18 +1,18 @@
-# RUN: llvm-objdump -help-hidden %t | FileCheck --check-prefix=CHECK-OBJDUMP %s
-# RUN: llvm-readobj -help-hidden %t | FileCheck --check-prefix=CHECK-READOBJ %s
-# RUN: llvm-tblgen -help-hidden %t | FileCheck --check-prefix=CHECK-TBLGEN %s
-# RUN: llvm-opt-report -help-hidden %t | FileCheck --check-prefix=CHECK-OPT-RPT %s
-# RUN: llvm-dwarfdump -help-hidden %t | FileCheck --check-prefix=CHECK-DWARF %s
+# RUN: llvm-objdump --help-hidden %t | FileCheck --check-prefix=CHECK-OBJDUMP %s
+# RUN: llvm-readobj --help-hidden %t | FileCheck --check-prefix=CHECK-READOBJ %s
+# RUN: llvm-tblgen --help-hidden %t | FileCheck --check-prefix=CHECK-TBLGEN %s
+# RUN: llvm-opt-report --help-hidden %t | FileCheck --check-prefix=CHECK-OPT-RPT %s
+# RUN: llvm-dwarfdump --help-hidden %t | FileCheck --check-prefix=CHECK-DWARF %s
# RUN: llvm-dwarfdump -h %t | FileCheck --check-prefix=CHECK-DWARF-H %s
# CHECK-OBJDUMP: -h - Alias for --section-headers
# CHECK-READOBJ: -h - Alias for --file-headers
-# CHECK-TBLGEN: -h - Alias for -help
-# CHECK-OPT-RPT: -h - Alias for -help
+# CHECK-TBLGEN: -h - Alias for --help
+# CHECK-OPT-RPT: -h - Alias for --help
# CHECK-DWARF: -h - Alias for -help
# llvm-dwarfdump declares `-h` option and prints special help in that case,
# which is weird, but makes for a good test, i.e., shows the default `-h`
# wasn't used.
-# CHECK-DWARF-H-NOT: -help-list - Display list of available options (-help-list-hidden for more)
+# CHECK-DWARF-H-NOT: --help-list - Display list of available options (--help-list-hidden for more)
Index: llvm/test/FileCheck/dump-input-enable.txt
===================================================================
--- llvm/test/FileCheck/dump-input-enable.txt
+++ llvm/test/FileCheck/dump-input-enable.txt
@@ -26,7 +26,7 @@
; RUN: not FileCheck -dump-input=foobar 2>&1 \
; RUN: | FileCheck %s -match-full-lines -check-prefix=BADVAL
-BADVAL: {{F|f}}ile{{C|c}}heck{{.*}}: for the -dump-input option: Cannot find option named 'foobar'!
+BADVAL: {{F|f}}ile{{C|c}}heck{{.*}}: for the --dump-input option: Cannot find option named 'foobar'!
;--------------------------------------------------
; Check -dump-input=help.
Index: llvm/lib/Support/CommandLine.cpp
===================================================================
--- llvm/lib/Support/CommandLine.cpp
+++ llvm/lib/Support/CommandLine.cpp
@@ -88,6 +88,22 @@
//===----------------------------------------------------------------------===//
+static StringRef ArgPrefix = " -";
+static StringRef ArgPrefixLong = " --";
+static StringRef ArgHelpPrefix = " - ";
+
+static size_t argPrefixesSize(size_t len) {
+ if (len == 1)
+ return ArgPrefix.size() + ArgHelpPrefix.size();
+ return ArgPrefixLong.size() + ArgHelpPrefix.size();
+}
+
+static StringRef argPrefix(size_t len) {
+ if (len == 1)
+ return ArgPrefix;
+ return ArgPrefixLong;
+}
+
namespace {
class CommandLineParser {
@@ -392,6 +408,8 @@
GlobalParser->updateArgStr(this, S);
assert((S.empty() || S[0] != '-') && "Option can't start with '-");
ArgStr = S;
+ if (ArgStr.size() == 1)
+ setMiscFlag(Grouping);
}
void Option::reset() {
@@ -1339,12 +1357,13 @@
if (!Handler) {
if (SinkOpts.empty()) {
*Errs << ProgramName << ": Unknown command line argument '" << argv[i]
- << "'. Try: '" << argv[0] << " -help'\n";
+ << "'. Try: '" << argv[0] << " --help'\n";
if (NearestHandler) {
// If we know a near match, report it as well.
- *Errs << ProgramName << ": Did you mean '-" << NearestHandlerString
- << "'?\n";
+ *Errs << ProgramName << ": Did you mean '"
+ << argPrefix(NearestHandler->ArgStr.size())
+ << NearestHandlerString << "'?\n";
}
ErrorParsing = true;
@@ -1378,14 +1397,14 @@
<< ": Not enough positional command line arguments specified!\n"
<< "Must specify at least " << NumPositionalRequired
<< " positional argument" << (NumPositionalRequired > 1 ? "s" : "")
- << ": See: " << argv[0] << " -help\n";
+ << ": See: " << argv[0] << " --help\n";
ErrorParsing = true;
} else if (!HasUnlimitedPositionals &&
PositionalVals.size() > PositionalOpts.size()) {
*Errs << ProgramName << ": Too many positional arguments specified!\n"
<< "Can specify at most " << PositionalOpts.size()
- << " positional arguments: See: " << argv[0] << " -help\n";
+ << " positional arguments: See: " << argv[0] << " --help\n";
ErrorParsing = true;
} else if (!ConsumeAfterOpt) {
@@ -1498,7 +1517,8 @@
if (ArgName.empty())
Errs << HelpStr; // Be nice for positional arguments
else
- Errs << GlobalParser->ProgramName << ": for the -" << ArgName;
+ Errs << GlobalParser->ProgramName << ": for the "
+ << argPrefix(ArgName.size()) << ArgName;
Errs << " option: " << Message << "\n";
return true;
@@ -1536,16 +1556,14 @@
return O.ValueStr;
}
-static StringRef ArgPrefix = " -";
-static StringRef ArgHelpPrefix = " - ";
-static size_t ArgPrefixesSize = ArgPrefix.size() + ArgHelpPrefix.size();
-
//===----------------------------------------------------------------------===//
// cl::alias class implementation
//
// Return the width of the option tag for printing...
-size_t alias::getOptionWidth() const { return ArgStr.size() + ArgPrefixesSize; }
+size_t alias::getOptionWidth() const {
+ return ArgStr.size() + argPrefixesSize(ArgStr.size());
+}
void Option::printHelpStr(StringRef HelpStr, size_t Indent,
size_t FirstLineIndentedBy) {
@@ -1561,8 +1579,9 @@
// Print out the option for the alias.
void alias::printOptionInfo(size_t GlobalWidth) const {
- outs() << ArgPrefix << ArgStr;
- printHelpStr(HelpStr, GlobalWidth, ArgStr.size() + ArgPrefixesSize);
+ outs() << argPrefix(ArgStr.size()) << ArgStr;
+ printHelpStr(HelpStr, GlobalWidth,
+ ArgStr.size() + argPrefixesSize(ArgStr.size()));
}
//===----------------------------------------------------------------------===//
@@ -1583,7 +1602,7 @@
Len += getValueStr(O, ValName).size() + FormattingLen;
}
- return Len + ArgPrefixesSize;
+ return Len + argPrefixesSize(O.ArgStr.size());
}
// printOptionInfo - Print out information about this option. The
@@ -1591,7 +1610,7 @@
//
void basic_parser_impl::printOptionInfo(const Option &O,
size_t GlobalWidth) const {
- outs() << ArgPrefix << O.ArgStr;
+ outs() << argPrefix(O.ArgStr.size()) << O.ArgStr;
auto ValName = getValueName();
if (!ValName.empty()) {
@@ -1607,7 +1626,7 @@
void basic_parser_impl::printOptionName(const Option &O,
size_t GlobalWidth) const {
- outs() << ArgPrefix << O.ArgStr;
+ outs() << argPrefix(O.ArgStr.size()) << O.ArgStr;
outs().indent(GlobalWidth - O.ArgStr.size());
}
@@ -1739,7 +1758,8 @@
// Return the width of the option tag for printing...
size_t generic_parser_base::getOptionWidth(const Option &O) const {
if (O.hasArgStr()) {
- size_t Size = O.ArgStr.size() + ArgPrefixesSize + EqValue.size();
+ size_t Size =
+ O.ArgStr.size() + argPrefixesSize(O.ArgStr.size()) + EqValue.size();
for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
StringRef Name = getOption(i);
if (!shouldPrintOption(Name, getDescription(i), O))
@@ -1767,17 +1787,19 @@
if (O.getValueExpectedFlag() == ValueOptional) {
for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
if (getOption(i).empty()) {
- outs() << ArgPrefix << O.ArgStr;
+ outs() << argPrefix(O.ArgStr.size()) << O.ArgStr;
Option::printHelpStr(O.HelpStr, GlobalWidth,
- O.ArgStr.size() + ArgPrefixesSize);
+ O.ArgStr.size() +
+ argPrefixesSize(O.ArgStr.size()));
break;
}
}
}
- outs() << ArgPrefix << O.ArgStr << EqValue;
+ outs() << argPrefix(O.ArgStr.size()) << O.ArgStr << EqValue;
Option::printHelpStr(O.HelpStr, GlobalWidth,
- O.ArgStr.size() + EqValue.size() + ArgPrefixesSize);
+ O.ArgStr.size() + EqValue.size() +
+ argPrefixesSize(O.ArgStr.size()));
for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
StringRef OptionName = getOption(i);
StringRef Description = getDescription(i);
@@ -1799,8 +1821,8 @@
if (!O.HelpStr.empty())
outs() << " " << O.HelpStr << '\n';
for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
- auto Option = getOption(i);
- outs() << " -" << Option;
+ StringRef Option = getOption(i);
+ outs() << " " << argPrefix(Option.size()) << Option;
Option::printHelpStr(getDescription(i), GlobalWidth, Option.size() + 8);
}
}
@@ -1814,7 +1836,7 @@
void generic_parser_base::printGenericOptionDiff(
const Option &O, const GenericOptionValue &Value,
const GenericOptionValue &Default, size_t GlobalWidth) const {
- outs() << " -" << O.ArgStr;
+ outs() << " " << argPrefix(O.ArgStr.size()) << O.ArgStr;
outs().indent(GlobalWidth - O.ArgStr.size());
unsigned NumOpts = getNumOptions();
@@ -2034,7 +2056,7 @@
printSubCommands(Subs, MaxSubLen);
outs() << "\n";
outs() << " Type \"" << GlobalParser->ProgramName
- << " <subcommand> -help\" to get more help on a specific "
+ << " <subcommand> --help\" to get more help on a specific "
"subcommand";
}
@@ -2111,7 +2133,7 @@
Category = SortedCategories.begin(),
E = SortedCategories.end();
Category != E; ++Category) {
- // Hide empty categories for -help, but show for -help-hidden.
+ // Hide empty categories for --help, but show for --help-hidden.
const auto &CategoryOptions = CategorizedOptions[*Category];
bool IsEmptyCategory = CategoryOptions.empty();
if (!ShowHidden && IsEmptyCategory)
@@ -2127,7 +2149,7 @@
else
outs() << "\n";
- // When using -help-hidden explicitly state if the category has no
+ // When using --help-hidden explicitly state if the category has no
// options associated with it.
if (IsEmptyCategory) {
outs() << " This option category has no options.\n";
@@ -2177,11 +2199,11 @@
static cl::OptionCategory GenericCategory("Generic Options");
// Define uncategorized help printers.
-// -help-list is hidden by default because if Option categories are being used
-// then -help behaves the same as -help-list.
+// --help-list is hidden by default because if Option categories are being used
+// then --help behaves the same as --help-list.
static cl::opt<HelpPrinter, true, parser<bool>> HLOp(
"help-list",
- cl::desc("Display list of available options (-help-list-hidden for more)"),
+ cl::desc("Display list of available options (--help-list-hidden for more)"),
cl::location(UncategorizedNormalPrinter), cl::Hidden, cl::ValueDisallowed,
cl::cat(GenericCategory), cl::sub(*AllSubCommands));
@@ -2195,11 +2217,11 @@
// behaviour at runtime depending on whether one or more Option categories have
// been declared.
static cl::opt<HelpPrinterWrapper, true, parser<bool>>
- HOp("help", cl::desc("Display available options (-help-hidden for more)"),
+ HOp("help", cl::desc("Display available options (--help-hidden for more)"),
cl::location(WrappedNormalPrinter), cl::ValueDisallowed,
cl::cat(GenericCategory), cl::sub(*AllSubCommands));
-static cl::alias HOpA("h", cl::desc("Alias for -help"), cl::aliasopt(HOp),
+static cl::alias HOpA("h", cl::desc("Alias for --help"), cl::aliasopt(HOp),
cl::DefaultOption);
static cl::opt<HelpPrinterWrapper, true, parser<bool>>
@@ -2226,7 +2248,7 @@
// registered then it is useful to show the categorized help instead of
// uncategorized help.
if (GlobalParser->RegisteredOptionCategories.size() > 1) {
- // unhide -help-list option so user can have uncategorized output if they
+ // unhide --help-list option so user can have uncategorized output if they
// want it.
HLOp.setHiddenFlag(NotHidden);
Index: llvm/include/llvm/Support/CommandLine.h
===================================================================
--- llvm/include/llvm/Support/CommandLine.h
+++ llvm/include/llvm/Support/CommandLine.h
@@ -1205,7 +1205,11 @@
};
template <> struct applicator<MiscFlags> {
- static void opt(MiscFlags MF, Option &O) { O.setMiscFlag(MF); }
+ static void opt(MiscFlags MF, Option &O) {
+ assert((MF != Grouping || O.ArgStr.size() == 1) &&
+ "cl::Grouping can only apply to single charater Options.");
+ O.setMiscFlag(MF);
+ }
};
// apply method - Apply modifiers to an option in a type safe way.
Index: clang/test/Driver/clang-offload-bundler.c
===================================================================
--- clang/test/Driver/clang-offload-bundler.c
+++ clang/test/Driver/clang-offload-bundler.c
@@ -74,10 +74,10 @@
// CK-ERR6: error: invalid file type specified.
// RUN: not clang-offload-bundler 2>&1 | FileCheck %s --check-prefix CK-ERR7
-// CK-ERR7-DAG: clang-offload-bundler: for the -type option: must be specified at least once!
-// CK-ERR7-DAG: clang-offload-bundler: for the -inputs option: must be specified at least once!
-// CK-ERR7-DAG: clang-offload-bundler: for the -outputs option: must be specified at least once!
-// CK-ERR7-DAG: clang-offload-bundler: for the -targets option: must be specified at least once!
+// CK-ERR7-DAG: clang-offload-bundler: for the --type option: must be specified at least once!
+// CK-ERR7-DAG: clang-offload-bundler: for the --inputs option: must be specified at least once!
+// CK-ERR7-DAG: clang-offload-bundler: for the --outputs option: must be specified at least once!
+// CK-ERR7-DAG: clang-offload-bundler: for the --targets option: must be specified at least once!
// RUN: not clang-offload-bundler -type=i -targets=hxst-powerpcxxle-ibm-linux-gnu,openxp-pxxerpc64le-ibm-linux-gnu,xpenmp-x86_xx-pc-linux-gnu -inputs=%t.i,%t.tgt1,%t.tgt2 -outputs=%t.bundle.i 2>&1 | FileCheck %s --check-prefix CK-ERR8
// CK-ERR8: error: invalid target 'hxst-powerpcxxle-ibm-linux-gnu', unknown offloading kind 'hxst', unknown target triple 'powerpcxxle-ibm-linux-gnu'.
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits