diff options
Diffstat (limited to 'contrib/llvm/lib/DebugInfo/PDB/DIA/DIAError.cpp')
| -rw-r--r-- | contrib/llvm/lib/DebugInfo/PDB/DIA/DIAError.cpp | 58 | 
1 files changed, 58 insertions, 0 deletions
diff --git a/contrib/llvm/lib/DebugInfo/PDB/DIA/DIAError.cpp b/contrib/llvm/lib/DebugInfo/PDB/DIA/DIAError.cpp new file mode 100644 index 000000000000..0da877b0fbad --- /dev/null +++ b/contrib/llvm/lib/DebugInfo/PDB/DIA/DIAError.cpp @@ -0,0 +1,58 @@ +#include "llvm/DebugInfo/PDB/DIA/DIAError.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/ManagedStatic.h" + +using namespace llvm; +using namespace llvm::pdb; + +// FIXME: This class is only here to support the transition to llvm::Error. It +// will be removed once this transition is complete. Clients should prefer to +// deal with the Error value directly, rather than converting to error_code. +class DIAErrorCategory : public std::error_category { +public: +  const char *name() const noexcept override { return "llvm.pdb.dia"; } + +  std::string message(int Condition) const override { +    switch (static_cast<dia_error_code>(Condition)) { +    case dia_error_code::could_not_create_impl: +      return "Failed to connect to DIA at runtime.  Verify that Visual Studio " +             "is properly installed, or that msdiaXX.dll is in your PATH."; +    case dia_error_code::invalid_file_format: +      return "Unable to load PDB.  The file has an unrecognized format."; +    case dia_error_code::invalid_parameter: +      return "The parameter is incorrect."; +    case dia_error_code::already_loaded: +      return "Unable to load the PDB or EXE, because it is already loaded."; +    case dia_error_code::debug_info_mismatch: +      return "The PDB file and the EXE file do not match."; +    case dia_error_code::unspecified: +      return "An unknown error has occurred."; +    } +    llvm_unreachable("Unrecognized DIAErrorCode"); +  } +}; + +static ManagedStatic<DIAErrorCategory> Category; + +char DIAError::ID = 0; + +DIAError::DIAError(dia_error_code C) : DIAError(C, "") {} + +DIAError::DIAError(StringRef Context) +    : DIAError(dia_error_code::unspecified, Context) {} + +DIAError::DIAError(dia_error_code C, StringRef Context) : Code(C) { +  ErrMsg = "DIA Error: "; +  std::error_code EC = convertToErrorCode(); +  ErrMsg += EC.message() + "  "; +  if (!Context.empty()) +    ErrMsg += Context; +} + +void DIAError::log(raw_ostream &OS) const { OS << ErrMsg << "\n"; } + +StringRef DIAError::getErrorMessage() const { return ErrMsg; } + +std::error_code DIAError::convertToErrorCode() const { +  return std::error_code(static_cast<int>(Code), *Category); +}  | 
