diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2017-09-07 22:20:38 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2017-09-07 22:20:38 +0000 |
commit | ec364d727bd3f5b348b72f8e814efa407da94122 (patch) | |
tree | cf7d38748f30a676faed72e47f253a3a9788a1bd /tools/llvm-ar | |
parent | 06296a65fdbc643089197465f3173a289f86f90c (diff) |
llvm-ar: exit with 1 if there is an error.
This is pr34396.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312752 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-ar')
-rw-r--r-- | tools/llvm-ar/llvm-ar.cpp | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp index 4fe12efb7ec..65c61989282 100644 --- a/tools/llvm-ar/llvm-ar.cpp +++ b/tools/llvm-ar/llvm-ar.cpp @@ -54,6 +54,8 @@ 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. exit(1); } @@ -164,26 +166,18 @@ static std::string ArchiveName; // on the command line. static std::vector<StringRef> Members; -// Show the error message, the help message and exit. -LLVM_ATTRIBUTE_NORETURN static void -show_help(const std::string &msg) { - errs() << ToolName << ": " << msg << "\n\n"; - cl::PrintHelpMessage(); - exit(1); -} - // Extract the member filename from the command line for the [relpos] argument // associated with a, b, and i modifiers static void getRelPos() { if(RestOfArgs.size() == 0) - show_help("Expected [relpos] for a, b, or i modifier"); + fail("Expected [relpos] for a, b, or i modifier"); RelPos = RestOfArgs[0]; RestOfArgs.erase(RestOfArgs.begin()); } static void getOptions() { if(RestOfArgs.size() == 0) - show_help("Expected options"); + fail("Expected options"); Options = RestOfArgs[0]; RestOfArgs.erase(RestOfArgs.begin()); } @@ -191,7 +185,7 @@ static void getOptions() { // Get the archive file name from the command line static void getArchive() { if(RestOfArgs.size() == 0) - show_help("An archive name must be specified"); + fail("An archive name must be specified"); ArchiveName = RestOfArgs[0]; RestOfArgs.erase(RestOfArgs.begin()); } @@ -275,7 +269,7 @@ static ArchiveOperation parseCommandLine() { Thin = true; break; default: - cl::PrintHelpMessage(); + fail(std::string("unknown option ") + Options[i]); } } @@ -290,26 +284,26 @@ static ArchiveOperation parseCommandLine() { NumOperations = 1; Operation = CreateSymTab; if (!Members.empty()) - show_help("The s operation takes only an archive as argument"); + fail("The s operation takes only an archive as argument"); } // Perform various checks on the operation/modifier specification // to make sure we are dealing with a legal request. if (NumOperations == 0) - show_help("You must specify at least one of the operations"); + fail("You must specify at least one of the operations"); if (NumOperations > 1) - show_help("Only one operation may be specified"); + fail("Only one operation may be specified"); if (NumPositional > 1) - show_help("You may only specify one of a, b, and i modifiers"); + fail("You may only specify one of a, b, and i modifiers"); if (AddAfter || AddBefore) { if (Operation != Move && Operation != ReplaceOrInsert) - show_help("The 'a', 'b' and 'i' modifiers can only be specified with " - "the 'm' or 'r' operations"); + fail("The 'a', 'b' and 'i' modifiers can only be specified with " + "the 'm' or 'r' operations"); } if (OriginalDates && Operation != Extract) - show_help("The 'o' modifier is only applicable to the 'x' operation"); + fail("The 'o' modifier is only applicable to the 'x' operation"); if (OnlyUpdate && Operation != ReplaceOrInsert) - show_help("The 'u' modifier is only applicable to the 'r' operation"); + fail("The 'u' modifier is only applicable to the 'r' operation"); // Return the parsed operation to the caller return Operation; |