blob: 4e2e8b163b533e52b575f520545239183ef3d0a0 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- Error.h - system_error extensions for PDB ----------------*- 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#ifndef LLVM_DEBUGINFO_PDB_ERROR_H
11#define LLVM_DEBUGINFO_PDB_ERROR_H
12
13#include "llvm/ADT/StringRef.h"
14#include "llvm/Support/Error.h"
15
16namespace llvm {
17namespace pdb {
18
Andrew Scull0372a572018-11-16 15:47:06 +000019enum class pdb_error_code {
20 invalid_utf8_path = 1,
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010021 dia_sdk_not_present,
Andrew Scull0372a572018-11-16 15:47:06 +000022 dia_failed_loading,
23 signature_out_of_date,
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010024 type_server_not_found,
25 unspecified,
26};
Andrew Scull0372a572018-11-16 15:47:06 +000027} // namespace codeview
28} // namespace llvm
29
30namespace std {
31 template <>
32 struct is_error_code_enum<llvm::pdb::pdb_error_code> : std::true_type {};
33} // namespace std
34
35namespace llvm {
36namespace pdb {
37 const std::error_category &PDBErrCategory();
38
39 inline std::error_code make_error_code(pdb_error_code E) {
40 return std::error_code(static_cast<int>(E), PDBErrCategory());
41 }
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010042
43/// Base class for errors originating when parsing raw PDB files
Andrew Scull0372a572018-11-16 15:47:06 +000044class PDBError : public ErrorInfo<PDBError, StringError> {
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010045public:
Andrew Scull0372a572018-11-16 15:47:06 +000046 using ErrorInfo<PDBError, StringError>::ErrorInfo; // inherit constructors
47 PDBError(const Twine &S) : ErrorInfo(S, pdb_error_code::unspecified) {}
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010048 static char ID;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010049};
Andrew Scull0372a572018-11-16 15:47:06 +000050} // namespace pdb
51} // namespace llvm
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010052#endif