1 //===- 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 16 namespace llvm { 17 namespace pdb { 18 19 enum class pdb_error_code { 20 invalid_utf8_path = 1, 21 dia_sdk_not_present, 22 dia_failed_loading, 23 signature_out_of_date, 24 external_cmdline_ref, 25 unspecified, 26 }; 27 } // namespace pdb 28 } // namespace llvm 29 30 namespace std { 31 template <> 32 struct is_error_code_enum<llvm::pdb::pdb_error_code> : std::true_type {}; 33 } // namespace std 34 35 namespace llvm { 36 namespace 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 } 42 43 /// Base class for errors originating when parsing raw PDB files 44 class PDBError : public ErrorInfo<PDBError, StringError> { 45 public: 46 using ErrorInfo<PDBError, StringError>::ErrorInfo; // inherit constructors 47 PDBError(const Twine &S) : ErrorInfo(S, pdb_error_code::unspecified) {} 48 static char ID; 49 }; 50 } // namespace pdb 51 } // namespace llvm 52 #endif 53