blob: 564b763ff3285a87d1169122ef84ec57c212c0f1 [file] [log] [blame]
Lang Hamese7aad352016-03-23 23:57:28 +00001//===----- 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
14using namespace llvm;
15
16namespace {
17
18 enum class ErrorErrorCode {
19 MultipleErrors
20 };
21
Peter Collingbourne4718f8b2016-05-24 20:13:46 +000022 // 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.
Lang Hamese7aad352016-03-23 23:57:28 +000025 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
NAKAMURA Takumid8c1be62016-03-24 15:19:39 +000038}
Lang Hamese7aad352016-03-23 23:57:28 +000039
40void ErrorInfoBase::anchor() {}
41char ErrorInfoBase::ID = 0;
Reid Klecknera15b76b2016-03-24 23:49:34 +000042char ErrorList::ID = 0;
43char ECError::ID = 0;
NAKAMURA Takumie6d29c92016-03-24 15:26:43 +000044
Lang Hamese7aad352016-03-23 23:57:28 +000045static ManagedStatic<ErrorErrorCategory> ErrorErrorCat;
46
47std::error_code ErrorList::convertToErrorCode() const {
48 return std::error_code(static_cast<int>(ErrorErrorCode::MultipleErrors),
49 *ErrorErrorCat);
50}