aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/pnacl-abicheck/pnacl-abicheck.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/tools/pnacl-abicheck/pnacl-abicheck.cpp b/tools/pnacl-abicheck/pnacl-abicheck.cpp
index 496a73c2fd..2fefd46c8b 100644
--- a/tools/pnacl-abicheck/pnacl-abicheck.cpp
+++ b/tools/pnacl-abicheck/pnacl-abicheck.cpp
@@ -26,13 +26,22 @@ using namespace llvm;
static cl::opt<std::string>
InputFilename(cl::Positional, cl::desc("<input bitcode>"), cl::init("-"));
-static void CheckABIVerifyErrors(PNaClABIErrorReporter &Reporter,
+static cl::opt<bool, false>
+Quiet("q", cl::desc("Do not print error messages"));
+
+// Print any errors collected by the error reporter. Return true if
+// there were any.
+static bool CheckABIVerifyErrors(PNaClABIErrorReporter &Reporter,
const Twine &Name) {
- if (Reporter.getErrorCount() > 0) {
- outs() << "ERROR: " << Name << " is not valid PNaCl bitcode:\n";
- Reporter.printErrors(outs());
+ bool HasErrors = Reporter.getErrorCount() > 0;
+ if (HasErrors) {
+ if (!Quiet) {
+ outs() << "ERROR: " << Name << " is not valid PNaCl bitcode:\n";
+ Reporter.printErrors(outs());
+ }
}
Reporter.reset();
+ return HasErrors;
}
int main(int argc, char **argv) {
@@ -46,17 +55,19 @@ int main(int argc, char **argv) {
return 1;
}
PNaClABIErrorReporter ABIErrorReporter;
+ bool ErrorsFound = false;
// Manually run the passes so we can tell the user which function had the
// error. No need for a pass manager since it's just one pass.
OwningPtr<ModulePass> ModuleChecker(createPNaClABIVerifyModulePass(&ABIErrorReporter));
ModuleChecker->runOnModule(*Mod);
- CheckABIVerifyErrors(ABIErrorReporter, "Module");
+ ErrorsFound |= CheckABIVerifyErrors(ABIErrorReporter, "Module");
OwningPtr<FunctionPass> FunctionChecker(
createPNaClABIVerifyFunctionsPass(&ABIErrorReporter));
for (Module::iterator MI = Mod->begin(), ME = Mod->end(); MI != ME; ++MI) {
FunctionChecker->runOnFunction(*MI);
- CheckABIVerifyErrors(ABIErrorReporter, "Function " + MI->getName());
+ ErrorsFound |= CheckABIVerifyErrors(ABIErrorReporter,
+ "Function " + MI->getName());
}
- return 0;
+ return ErrorsFound;
}