1//===- RawError.h - Error extensions for raw PDB implementation -*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_DEBUGINFO_PDB_RAW_RAWERROR_H
10#define LLVM_DEBUGINFO_PDB_RAW_RAWERROR_H
11
12#include "llvm/Support/Error.h"
13
14#include <string>
15
16namespace llvm {
17namespace pdb {
18enum class raw_error_code {
19  unspecified = 1,
20  feature_unsupported,
21  invalid_format,
22  corrupt_file,
23  insufficient_buffer,
24  no_stream,
25  index_out_of_bounds,
26  invalid_block_address,
27  duplicate_entry,
28  no_entry,
29  not_writable,
30  stream_too_long,
31  invalid_tpi_hash,
32};
33} // namespace pdb
34} // namespace llvm
35
36namespace std {
37template <>
38struct is_error_code_enum<llvm::pdb::raw_error_code> : std::true_type {};
39} // namespace std
40
41namespace llvm {
42namespace pdb {
43const std::error_category &RawErrCategory();
44
45inline std::error_code make_error_code(raw_error_code E) {
46  return std::error_code(static_cast<int>(E), RawErrCategory());
47}
48
49/// Base class for errors originating when parsing raw PDB files
50class RawError : public ErrorInfo<RawError, StringError> {
51public:
52  using ErrorInfo<RawError, StringError>::ErrorInfo; // inherit constructors
53  RawError(const Twine &S) : ErrorInfo(S, raw_error_code::unspecified) {}
54  static char ID;
55};
56} // namespace pdb
57} // namespace llvm
58#endif
59