]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/lib/TableGen/Error.cpp
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / lib / TableGen / Error.cpp
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
20 namespace llvm {
21
22 SourceMgr SrcMgr;
23 unsigned ErrorsPrinted = 0;
24
25 static 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
41 void PrintWarning(ArrayRef<SMLoc> WarningLoc, const Twine &Msg) {
42   PrintMessage(WarningLoc, SourceMgr::DK_Warning, Msg);
43 }
44
45 void PrintWarning(const char *Loc, const Twine &Msg) {
46   SrcMgr.PrintMessage(SMLoc::getFromPointer(Loc), SourceMgr::DK_Warning, Msg);
47 }
48
49 void PrintWarning(const Twine &Msg) {
50   errs() << "warning:" << Msg << "\n";
51 }
52
53 void PrintError(ArrayRef<SMLoc> ErrorLoc, const Twine &Msg) {
54   PrintMessage(ErrorLoc, SourceMgr::DK_Error, Msg);
55 }
56
57 void PrintError(const char *Loc, const Twine &Msg) {
58   SrcMgr.PrintMessage(SMLoc::getFromPointer(Loc), SourceMgr::DK_Error, Msg);
59 }
60
61 void PrintError(const Twine &Msg) {
62   errs() << "error:" << Msg << "\n";
63 }
64
65 void PrintFatalError(const std::string &Msg) {
66   PrintError(Twine(Msg));
67   std::exit(1);
68 }
69
70 void PrintFatalError(ArrayRef<SMLoc> ErrorLoc, const std::string &Msg) {
71   PrintError(ErrorLoc, Msg);
72   std::exit(1);
73 }
74
75 } // end namespace llvm