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 // FIXME: This class is only here to support the transition to llvm::Error. It 23 // will be removed once this transition is complete. Clients should prefer to 24 // deal with the Error value directly, rather than converting to error_code. 25 class ErrorErrorCategory : public std::error_category { 26 public: 27 const char *name() const LLVM_NOEXCEPT override { return "Error"; } 28 29 std::string message(int condition) const override { 30 switch (static_cast<ErrorErrorCode>(condition)) { 31 case ErrorErrorCode::MultipleErrors: 32 return "Multiple errors"; 33 }; 34 llvm_unreachable("Unhandled error code"); 35 } 36 }; 37 38 } 39 40 void ErrorInfoBase::anchor() {} 41 char ErrorInfoBase::ID = 0; 42 char ErrorList::ID = 0; 43 char ECError::ID = 0; 44 45 static ManagedStatic<ErrorErrorCategory> ErrorErrorCat; 46 47 std::error_code ErrorList::convertToErrorCode() const { 48 return std::error_code(static_cast<int>(ErrorErrorCode::MultipleErrors), 49 *ErrorErrorCat); 50 } 51