1 /*========================== begin_copyright_notice ============================ 2 3 Copyright (C) 2020-2021 Intel Corporation 4 5 SPDX-License-Identifier: MIT 6 7 ============================= end_copyright_notice ===========================*/ 8 9 #ifndef VC_SUPPORT_STATUS_H 10 #define VC_SUPPORT_STATUS_H 11 12 #include "vc/Support/StatusCode.h" 13 14 #include <llvm/Support/Error.h> 15 16 #include <system_error> 17 18 namespace vc { 19 20 class DynLoadError final : public llvm::ErrorInfo<DynLoadError> { 21 public: 22 static char ID; 23 24 private: 25 std::string Message; 26 27 public: DynLoadError(llvm::StringRef Msg)28 DynLoadError(llvm::StringRef Msg) : Message(Msg.str()) {} 29 30 void log(llvm::raw_ostream &OS) const override; convertToErrorCode()31 std::error_code convertToErrorCode() const override { 32 return make_error_code(errc::dynamic_load_fail); 33 } 34 }; 35 36 class SymbolLookupError final : public llvm::ErrorInfo<SymbolLookupError> { 37 public: 38 static char ID; 39 40 private: 41 std::string Library; 42 std::string Symbol; 43 44 public: SymbolLookupError(llvm::StringRef Lib,llvm::StringRef Sym)45 SymbolLookupError(llvm::StringRef Lib, llvm::StringRef Sym) 46 : Library(Lib.str()), Symbol(Sym.str()) {} 47 48 void log(llvm::raw_ostream &OS) const override; convertToErrorCode()49 std::error_code convertToErrorCode() const override { 50 return make_error_code(errc::symbol_not_found); 51 } 52 }; 53 54 class BadSpirvError final : public llvm::ErrorInfo<BadSpirvError> { 55 public: 56 static char ID; 57 58 private: 59 std::string Message; 60 61 public: BadSpirvError(llvm::StringRef Msg)62 BadSpirvError(llvm::StringRef Msg) : Message(Msg.str()) {} 63 64 void log(llvm::raw_ostream &OS) const override; convertToErrorCode()65 std::error_code convertToErrorCode() const override { 66 return make_error_code(errc::bad_spirv); 67 } 68 }; 69 70 class BadBitcodeError final : public llvm::ErrorInfo<BadBitcodeError> { 71 public: 72 static char ID; 73 74 private: 75 std::string Message; 76 77 public: BadBitcodeError(llvm::StringRef Msg)78 BadBitcodeError(llvm::StringRef Msg) : Message(Msg.str()) {} 79 80 void log(llvm::raw_ostream &OS) const override; convertToErrorCode()81 std::error_code convertToErrorCode() const override { 82 return make_error_code(errc::bad_bitcode); 83 } 84 }; 85 86 class InvalidModuleError final : public llvm::ErrorInfo<InvalidModuleError> { 87 public: 88 static char ID; 89 90 void log(llvm::raw_ostream &OS) const override; convertToErrorCode()91 std::error_code convertToErrorCode() const override { 92 return make_error_code(errc::invalid_module); 93 } 94 }; 95 96 class TargetMachineError final : public llvm::ErrorInfo<TargetMachineError> { 97 public: 98 static char ID; 99 100 void log(llvm::raw_ostream &OS) const override; convertToErrorCode()101 std::error_code convertToErrorCode() const override { 102 return make_error_code(errc::target_machine_not_created); 103 } 104 }; 105 106 class NotVCError final : public llvm::ErrorInfo<NotVCError> { 107 public: 108 static char ID; 109 110 void log(llvm::raw_ostream &OS) const override; convertToErrorCode()111 std::error_code convertToErrorCode() const override { 112 return make_error_code(errc::not_vc_codegen); 113 } 114 }; 115 116 class OptionError final : public llvm::ErrorInfo<OptionError> { 117 public: 118 static char ID; 119 120 private: 121 std::string BadOption; 122 bool IsInternal; 123 124 public: OptionError(llvm::StringRef BadOpt,bool IsInternal_)125 OptionError(llvm::StringRef BadOpt, bool IsInternal_) 126 : BadOption(BadOpt.str()), IsInternal(IsInternal_) {} 127 isInternal()128 bool isInternal() const { return IsInternal; } 129 130 void log(llvm::raw_ostream &OS) const override; convertToErrorCode()131 std::error_code convertToErrorCode() const override { 132 const errc c = 133 IsInternal ? errc::invalid_internal_option : errc::invalid_api_option; 134 return make_error_code(c); 135 } 136 }; 137 138 class OutputBinaryCreationError final 139 : public llvm::ErrorInfo<OutputBinaryCreationError> { 140 public: 141 static char ID; 142 143 private: 144 std::string Message; 145 146 public: OutputBinaryCreationError(llvm::StringRef Msg)147 OutputBinaryCreationError(llvm::StringRef Msg) : Message{Msg.str()} {} 148 149 void log(llvm::raw_ostream &OS) const override; convertToErrorCode()150 std::error_code convertToErrorCode() const override { 151 return make_error_code(errc::output_not_created); 152 } 153 }; 154 155 } // namespace vc 156 157 #endif 158