summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2017-09-07 23:30:48 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2017-09-07 23:30:48 +0000
commit39c150eecbc1cf83836c59a516ee9aa1795a189c (patch)
treec7143559b7d4b1446f922dc039f5a9dcb23ae2d2
parent975293f0e593761a5d2d4446463fecd14b425aff (diff)
downloadbcm5719-llvm-39c150eecbc1cf83836c59a516ee9aa1795a189c.tar.gz
bcm5719-llvm-39c150eecbc1cf83836c59a516ee9aa1795a189c.zip
Don't call exit from cl::PrintHelpMessage.
Most callers were not expecting the exit(0) and trying to exit with a different value. This also adds back the call to cl::PrintHelpMessage in llvm-ar. llvm-svn: 312761
-rw-r--r--llvm/include/llvm/Support/CommandLine.h2
-rw-r--r--llvm/lib/Support/CommandLine.cpp24
-rw-r--r--llvm/test/tools/llvm-ar/invalid-command-line.test1
-rw-r--r--llvm/tools/dsymutil/dsymutil.cpp4
-rw-r--r--llvm/tools/llvm-ar/llvm-ar.cpp3
-rw-r--r--llvm/tools/llvm-opt-report/OptReport.cpp4
-rw-r--r--llvm/tools/llvm-xray/llvm-xray.cc1
7 files changed, 19 insertions, 20 deletions
diff --git a/llvm/include/llvm/Support/CommandLine.h b/llvm/include/llvm/Support/CommandLine.h
index 22d18194dd8..2357a122a47 100644
--- a/llvm/include/llvm/Support/CommandLine.h
+++ b/llvm/include/llvm/Support/CommandLine.h
@@ -1762,8 +1762,6 @@ void PrintVersionMessage();
/// This function just prints the help message, exactly the same way as if the
/// -help or -help-hidden option had been given on the command line.
///
-/// NOTE: THIS FUNCTION TERMINATES THE PROGRAM!
-///
/// \param Hidden if true will print hidden options
/// \param Categorized if true print options in categories
void PrintHelpMessage(bool Hidden = false, bool Categorized = false);
diff --git a/llvm/lib/Support/CommandLine.cpp b/llvm/lib/Support/CommandLine.cpp
index 8fb01211e97..0d662cb0375 100644
--- a/llvm/lib/Support/CommandLine.cpp
+++ b/llvm/lib/Support/CommandLine.cpp
@@ -1758,7 +1758,13 @@ public:
void operator=(bool Value) {
if (!Value)
return;
+ printHelp();
+ // Halt the program since help information was printed
+ exit(0);
+ }
+
+ void printHelp() {
SubCommand *Sub = GlobalParser->getActiveSubCommand();
auto &OptionsMap = Sub->OptionsMap;
auto &PositionalOpts = Sub->PositionalOpts;
@@ -1826,9 +1832,6 @@ public:
for (auto I : GlobalParser->MoreHelp)
outs() << I;
GlobalParser->MoreHelp.clear();
-
- // Halt the program since help information was printed
- exit(0);
}
};
@@ -2098,21 +2101,14 @@ static cl::opt<VersionPrinter, true, parser<bool>>
// Utility function for printing the help message.
void cl::PrintHelpMessage(bool Hidden, bool Categorized) {
- // This looks weird, but it actually prints the help message. The Printers are
- // types of HelpPrinter and the help gets printed when its operator= is
- // invoked. That's because the "normal" usages of the help printer is to be
- // assigned true/false depending on whether -help or -help-hidden was given or
- // not. Since we're circumventing that we have to make it look like -help or
- // -help-hidden were given, so we assign true.
-
if (!Hidden && !Categorized)
- UncategorizedNormalPrinter = true;
+ UncategorizedNormalPrinter.printHelp();
else if (!Hidden && Categorized)
- CategorizedNormalPrinter = true;
+ CategorizedNormalPrinter.printHelp();
else if (Hidden && !Categorized)
- UncategorizedHiddenPrinter = true;
+ UncategorizedHiddenPrinter.printHelp();
else
- CategorizedHiddenPrinter = true;
+ CategorizedHiddenPrinter.printHelp();
}
/// Utility function for printing version number.
diff --git a/llvm/test/tools/llvm-ar/invalid-command-line.test b/llvm/test/tools/llvm-ar/invalid-command-line.test
index 44a37286a99..e13f54c07bd 100644
--- a/llvm/test/tools/llvm-ar/invalid-command-line.test
+++ b/llvm/test/tools/llvm-ar/invalid-command-line.test
@@ -2,3 +2,4 @@ Test that llvm-ar exits with 1 when there is an error.
RUN: not llvm-ar e 2>&1 | FileCheck %s
CHECK: unknown option e.
+CHECK: OVERVIEW: LLVM Archiver (llvm-ar)
diff --git a/llvm/tools/dsymutil/dsymutil.cpp b/llvm/tools/dsymutil/dsymutil.cpp
index 1ce0aefeec2..51eb3ff2e39 100644
--- a/llvm/tools/dsymutil/dsymutil.cpp
+++ b/llvm/tools/dsymutil/dsymutil.cpp
@@ -253,8 +253,10 @@ int main(int argc, char **argv) {
"for the executable <input file> by using debug symbols information\n"
"contained in its symbol table.\n");
- if (Help)
+ if (Help) {
PrintHelpMessage();
+ return 0;
+ }
if (Version) {
llvm::cl::PrintVersionMessage();
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp
index 65c61989282..03655cb4318 100644
--- a/llvm/tools/llvm-ar/llvm-ar.cpp
+++ b/llvm/tools/llvm-ar/llvm-ar.cpp
@@ -54,8 +54,7 @@ static StringRef ToolName;
// Show the error message and exit.
LLVM_ATTRIBUTE_NORETURN static void fail(Twine Error) {
errs() << ToolName << ": " << Error << ".\n";
- // FIXME: Other ar implementations will print the command line help in here.
- // Unfortunately cl::PrintHelpMessage() exits with 0, so we can't call it.
+ cl::PrintHelpMessage();
exit(1);
}
diff --git a/llvm/tools/llvm-opt-report/OptReport.cpp b/llvm/tools/llvm-opt-report/OptReport.cpp
index 4f45dd9f2aa..3c6115db6ac 100644
--- a/llvm/tools/llvm-opt-report/OptReport.cpp
+++ b/llvm/tools/llvm-opt-report/OptReport.cpp
@@ -514,8 +514,10 @@ int main(int argc, const char **argv) {
"A tool to generate an optimization report from YAML optimization"
" record files.\n");
- if (Help)
+ if (Help) {
cl::PrintHelpMessage();
+ return 0;
+ }
LocationInfoTy LocationInfo;
if (!readLocationInfo(LocationInfo))
diff --git a/llvm/tools/llvm-xray/llvm-xray.cc b/llvm/tools/llvm-xray/llvm-xray.cc
index 98303e7be15..34c453a1eb4 100644
--- a/llvm/tools/llvm-xray/llvm-xray.cc
+++ b/llvm/tools/llvm-xray/llvm-xray.cc
@@ -46,4 +46,5 @@ int main(int argc, char *argv[]) {
// If all else fails, we still print the usage message.
cl::PrintHelpMessage(false, true);
+ return 0;
}
OpenPOWER on IntegriCloud