Error.cpp revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
1//===- Error.cpp - tblgen error handling helper routines --------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file contains error handling helper routines to pretty-print diagnostic 11// messages from tblgen. 12// 13//===----------------------------------------------------------------------===// 14 15#include "llvm/TableGen/Error.h" 16#include "llvm/ADT/Twine.h" 17#include "llvm/Support/raw_ostream.h" 18#include <cstdlib> 19 20namespace llvm { 21 22SourceMgr SrcMgr; 23unsigned ErrorsPrinted = 0; 24 25static void PrintMessage(ArrayRef<SMLoc> Loc, SourceMgr::DiagKind Kind, 26 const Twine &Msg) { 27 // Count the total number of errors printed. 28 // This is used to exit with an error code if there were any errors. 29 if (Kind == SourceMgr::DK_Error) 30 ++ErrorsPrinted; 31 32 SMLoc NullLoc; 33 if (Loc.empty()) 34 Loc = NullLoc; 35 SrcMgr.PrintMessage(Loc.front(), Kind, Msg); 36 for (unsigned i = 1; i < Loc.size(); ++i) 37 SrcMgr.PrintMessage(Loc[i], SourceMgr::DK_Note, 38 "instantiated from multiclass"); 39} 40 41void PrintWarning(ArrayRef<SMLoc> WarningLoc, const Twine &Msg) { 42 PrintMessage(WarningLoc, SourceMgr::DK_Warning, Msg); 43} 44 45void PrintWarning(const char *Loc, const Twine &Msg) { 46 SrcMgr.PrintMessage(SMLoc::getFromPointer(Loc), SourceMgr::DK_Warning, Msg); 47} 48 49void PrintWarning(const Twine &Msg) { 50 errs() << "warning:" << Msg << "\n"; 51} 52 53void PrintError(ArrayRef<SMLoc> ErrorLoc, const Twine &Msg) { 54 PrintMessage(ErrorLoc, SourceMgr::DK_Error, Msg); 55} 56 57void PrintError(const char *Loc, const Twine &Msg) { 58 SrcMgr.PrintMessage(SMLoc::getFromPointer(Loc), SourceMgr::DK_Error, Msg); 59} 60 61void PrintError(const Twine &Msg) { 62 errs() << "error:" << Msg << "\n"; 63} 64 65void PrintFatalError(const Twine &Msg) { 66 PrintError(Msg); 67 std::exit(1); 68} 69 70void PrintFatalError(ArrayRef<SMLoc> ErrorLoc, const Twine &Msg) { 71 PrintError(ErrorLoc, Msg); 72 std::exit(1); 73} 74 75} // end namespace llvm 76