Make sure TableGen exits with an error code after printing errors.

This makes it possible to report multiple errors in one invocation.
There are already calls to PrintError in CodeGenDAGPatterns.cpp which
previously would not cause TableGen to fail.

<rdar://problem/13463339>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177573 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jakob Stoklund Olesen
2013-03-20 20:43:11 +00:00
parent 6115ed0e43
commit f8ea5a5a27
3 changed files with 12 additions and 2 deletions

View File

@@ -32,6 +32,7 @@ LLVM_ATTRIBUTE_NORETURN void PrintFatalError(ArrayRef<SMLoc> ErrorLoc,
const std::string &Msg); const std::string &Msg);
extern SourceMgr SrcMgr; extern SourceMgr SrcMgr;
extern unsigned ErrorsPrinted;
} // end namespace "llvm" } // end namespace "llvm"

View File

@@ -20,9 +20,15 @@
namespace llvm { namespace llvm {
SourceMgr SrcMgr; SourceMgr SrcMgr;
unsigned ErrorsPrinted = 0;
static void PrintMessage(ArrayRef<SMLoc> Loc, SourceMgr::DiagKind Kind, static void PrintMessage(ArrayRef<SMLoc> Loc, SourceMgr::DiagKind Kind,
const Twine &Msg) { const Twine &Msg) {
// Count the total number of errors printed.
// This is used to exit with an error code if there were any errors.
if (Kind == SourceMgr::DK_Error)
++ErrorsPrinted;
SMLoc NullLoc; SMLoc NullLoc;
if (Loc.empty()) if (Loc.empty())
Loc = NullLoc; Loc = NullLoc;

View File

@@ -117,11 +117,14 @@ int TableGenMain(char *argv0, TableGenMainFn *MainFn) {
if (MainFn(Out.os(), Records)) if (MainFn(Out.os(), Records))
return 1; return 1;
if (ErrorsPrinted > 0) {
errs() << argv0 << ": " << ErrorsPrinted << " errors.\n";
return 1;
}
// Declare success. // Declare success.
Out.keep(); Out.keep();
return 0; return 0;
return 1;
} }
} }