summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-ar
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2017-09-07 22:20:38 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2017-09-07 22:20:38 +0000
commit84ef7b42586c31f1932d7e6327e36d03e70f3025 (patch)
tree603d7d60b4e1d3526603471399e706fda7553289 /llvm/tools/llvm-ar
parentbb921370809f6d297108b7efac4df7fb9051128b (diff)
downloadbcm5719-llvm-84ef7b42586c31f1932d7e6327e36d03e70f3025.tar.gz
bcm5719-llvm-84ef7b42586c31f1932d7e6327e36d03e70f3025.zip
llvm-ar: exit with 1 if there is an error.
This is pr34396. llvm-svn: 312752
Diffstat (limited to 'llvm/tools/llvm-ar')
-rw-r--r--llvm/tools/llvm-ar/llvm-ar.cpp34
1 files changed, 14 insertions, 20 deletions
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp
index 4fe12efb7ec..65c61989282 100644
--- a/llvm/tools/llvm-ar/llvm-ar.cpp
+++ b/llvm/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;
OpenPOWER on IntegriCloud