LLVM  6.0.0svn
RawError.cpp
Go to the documentation of this file.
4 
5 using namespace llvm;
6 using namespace llvm::pdb;
7 
8 namespace {
9 // FIXME: This class is only here to support the transition to llvm::Error. It
10 // will be removed once this transition is complete. Clients should prefer to
11 // deal with the Error value directly, rather than converting to error_code.
12 class RawErrorCategory : public std::error_category {
13 public:
14  const char *name() const noexcept override { return "llvm.pdb.raw"; }
15 
16  std::string message(int Condition) const override {
17  switch (static_cast<raw_error_code>(Condition)) {
19  return "An unknown error has occurred.";
21  return "The feature is unsupported by the implementation.";
23  return "The record is in an unexpected format.";
25  return "The PDB file is corrupt.";
27  return "The buffer is not large enough to read the requested number of "
28  "bytes.";
30  return "The specified stream could not be loaded.";
32  return "The specified item does not exist in the array.";
34  return "The specified block address is not valid.";
36  return "The entry already exists.";
38  return "The entry does not exist.";
40  return "The PDB does not support writing.";
42  return "The stream was longer than expected.";
44  return "The Type record has an invalid hash value.";
45  }
46  llvm_unreachable("Unrecognized raw_error_code");
47  }
48 };
49 } // end anonymous namespace
50 
52 
53 char RawError::ID = 0;
54 
56 
57 RawError::RawError(const std::string &Context)
58  : RawError(raw_error_code::unspecified, Context) {}
59 
60 RawError::RawError(raw_error_code C, const std::string &Context) : Code(C) {
61  ErrMsg = "Native PDB Error: ";
62  std::error_code EC = convertToErrorCode();
63  if (Code != raw_error_code::unspecified)
64  ErrMsg += EC.message() + " ";
65  if (!Context.empty())
66  ErrMsg += Context;
67 }
68 
69 void RawError::log(raw_ostream &OS) const { OS << ErrMsg << "\n"; }
70 
71 const std::string &RawError::getErrorMessage() const { return ErrMsg; }
72 
73 std::error_code RawError::convertToErrorCode() const {
74  return std::error_code(static_cast<int>(Code), *Category);
75 }
uint64_t CallInst * C
LLVMContext & Context
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
Base class for errors originating when parsing raw PDB files.
Definition: RawError.h:36
const std::string & getErrorMessage() const
Definition: RawError.cpp:71
raw_error_code
Definition: RawError.h:19
static ManagedStatic< RawErrorCategory > Category
Definition: RawError.cpp:51
void log(raw_ostream &OS) const override
Print an error message to an output stream.
Definition: RawError.cpp:69
static ManagedStatic< _object_error_category > error_category
Definition: Error.cpp:74
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
std::error_code convertToErrorCode() const override
Convert this error to a std::error_code.
Definition: RawError.cpp:73
RawError(raw_error_code C)
Definition: RawError.cpp:55
aarch64 promote const
static const char * name
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:44
ManagedStatic - This transparently changes the behavior of global statics to be lazily constructed on...
Definition: ManagedStatic.h:61
static char ID
Definition: RawError.h:38