1 //===----- lib/Support/Error.cpp - Error and associated utilities ---------===//
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 #include "llvm/Support/Error.h"
11 #include "llvm/Support/ErrorHandling.h"
12 #include "llvm/Support/ManagedStatic.h"
13 
14 using namespace llvm;
15 
16 namespace {
17 
18   enum class ErrorErrorCode {
19     MultipleErrors
20   };
21 
22   class ErrorErrorCategory : public std::error_category {
23   public:
24     const char *name() const LLVM_NOEXCEPT override { return "Error"; }
25 
26     std::string message(int condition) const override {
27       switch (static_cast<ErrorErrorCode>(condition)) {
28       case ErrorErrorCode::MultipleErrors:
29         return "Multiple errors";
30       };
31       llvm_unreachable("Unhandled error code");
32     }
33   };
34 
35 }
36 
37 void ErrorInfoBase::anchor() {}
38 char ErrorInfoBase::ID = 0;
39 char ErrorList::ID = 0;
40 char ECError::ID = 0;
41 
42 static ManagedStatic<ErrorErrorCategory> ErrorErrorCat;
43 
44 std::error_code ErrorList::convertToErrorCode() const {
45   return std::error_code(static_cast<int>(ErrorErrorCode::MultipleErrors),
46                          *ErrorErrorCat);
47 }
48