1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- //===- Error.cpp - tblgen error handling helper routines --------*- C++ -*-===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- //
- // This file contains error handling helper routines to pretty-print diagnostic
- // messages from tblgen.
- //
- //===----------------------------------------------------------------------===//
- #include "llvm/TableGen/Error.h"
- #include "llvm/ADT/Twine.h"
- #include "llvm/Support/Signals.h"
- #include "llvm/Support/raw_ostream.h"
- #include <cstdlib>
- namespace llvm {
- SourceMgr SrcMgr;
- unsigned ErrorsPrinted = 0;
- static void PrintMessage(ArrayRef<SMLoc> Loc, SourceMgr::DiagKind Kind,
- 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;
- if (Loc.empty())
- Loc = NullLoc;
- SrcMgr.PrintMessage(Loc.front(), Kind, Msg);
- for (unsigned i = 1; i < Loc.size(); ++i)
- SrcMgr.PrintMessage(Loc[i], SourceMgr::DK_Note,
- "instantiated from multiclass");
- }
- void PrintWarning(ArrayRef<SMLoc> WarningLoc, const Twine &Msg) {
- PrintMessage(WarningLoc, SourceMgr::DK_Warning, Msg);
- }
- void PrintWarning(const char *Loc, const Twine &Msg) {
- SrcMgr.PrintMessage(SMLoc::getFromPointer(Loc), SourceMgr::DK_Warning, Msg);
- }
- void PrintWarning(const Twine &Msg) {
- errs() << "warning:" << Msg << "\n";
- }
- void PrintError(ArrayRef<SMLoc> ErrorLoc, const Twine &Msg) {
- PrintMessage(ErrorLoc, SourceMgr::DK_Error, Msg);
- }
- void PrintError(const char *Loc, const Twine &Msg) {
- SrcMgr.PrintMessage(SMLoc::getFromPointer(Loc), SourceMgr::DK_Error, Msg);
- }
- void PrintError(const Twine &Msg) {
- errs() << "error:" << Msg << "\n";
- }
- void PrintFatalError(const Twine &Msg) {
- PrintError(Msg);
- // The following call runs the file cleanup handlers.
- sys::RunInterruptHandlers();
- std::exit(1);
- }
- void PrintFatalError(ArrayRef<SMLoc> ErrorLoc, const Twine &Msg) {
- PrintError(ErrorLoc, Msg);
- // The following call runs the file cleanup handlers.
- sys::RunInterruptHandlers();
- std::exit(1);
- }
- } // end namespace llvm
|