19 #include "llvm/Config/config.h"
33 #if defined(HAVE_UNISTD_H)
76 void* handlerData =
nullptr;
86 handler(handlerData, Reason.
str(), GenCrashDiag);
93 OS <<
"LLVM ERROR: " << Reason <<
"\n";
113 dbgs() << msg <<
"\n";
114 dbgs() <<
"UNREACHABLE executed";
116 dbgs() <<
" at " << file <<
":" << line;
119 #ifdef LLVM_BUILTIN_UNREACHABLE
122 LLVM_BUILTIN_UNREACHABLE;
127 bool gen_crash_diag) {
130 handler(reason.c_str());
144 #include <winerror.h>
147 #define MAP_ERR_TO_COND(x, y) \
149 return make_error_code(errc::y)
153 MAP_ERR_TO_COND(ERROR_ACCESS_DENIED, permission_denied);
154 MAP_ERR_TO_COND(ERROR_ALREADY_EXISTS, file_exists);
155 MAP_ERR_TO_COND(ERROR_BAD_UNIT, no_such_device);
156 MAP_ERR_TO_COND(ERROR_BUFFER_OVERFLOW, filename_too_long);
157 MAP_ERR_TO_COND(ERROR_BUSY, device_or_resource_busy);
158 MAP_ERR_TO_COND(ERROR_BUSY_DRIVE, device_or_resource_busy);
159 MAP_ERR_TO_COND(ERROR_CANNOT_MAKE, permission_denied);
160 MAP_ERR_TO_COND(ERROR_CANTOPEN, io_error);
161 MAP_ERR_TO_COND(ERROR_CANTREAD, io_error);
162 MAP_ERR_TO_COND(ERROR_CANTWRITE, io_error);
163 MAP_ERR_TO_COND(ERROR_CURRENT_DIRECTORY, permission_denied);
164 MAP_ERR_TO_COND(ERROR_DEV_NOT_EXIST, no_such_device);
165 MAP_ERR_TO_COND(ERROR_DEVICE_IN_USE, device_or_resource_busy);
166 MAP_ERR_TO_COND(ERROR_DIR_NOT_EMPTY, directory_not_empty);
167 MAP_ERR_TO_COND(ERROR_DIRECTORY, invalid_argument);
168 MAP_ERR_TO_COND(ERROR_DISK_FULL, no_space_on_device);
169 MAP_ERR_TO_COND(ERROR_FILE_EXISTS, file_exists);
170 MAP_ERR_TO_COND(ERROR_FILE_NOT_FOUND, no_such_file_or_directory);
171 MAP_ERR_TO_COND(ERROR_HANDLE_DISK_FULL, no_space_on_device);
172 MAP_ERR_TO_COND(ERROR_INVALID_ACCESS, permission_denied);
173 MAP_ERR_TO_COND(ERROR_INVALID_DRIVE, no_such_device);
174 MAP_ERR_TO_COND(ERROR_INVALID_FUNCTION, function_not_supported);
175 MAP_ERR_TO_COND(ERROR_INVALID_HANDLE, invalid_argument);
176 MAP_ERR_TO_COND(ERROR_INVALID_NAME, invalid_argument);
177 MAP_ERR_TO_COND(ERROR_LOCK_VIOLATION, no_lock_available);
178 MAP_ERR_TO_COND(ERROR_LOCKED, no_lock_available);
179 MAP_ERR_TO_COND(ERROR_NEGATIVE_SEEK, invalid_argument);
180 MAP_ERR_TO_COND(ERROR_NOACCESS, permission_denied);
181 MAP_ERR_TO_COND(ERROR_NOT_ENOUGH_MEMORY, not_enough_memory);
182 MAP_ERR_TO_COND(ERROR_NOT_READY, resource_unavailable_try_again);
183 MAP_ERR_TO_COND(ERROR_OPEN_FAILED, io_error);
184 MAP_ERR_TO_COND(ERROR_OPEN_FILES, device_or_resource_busy);
185 MAP_ERR_TO_COND(ERROR_OUTOFMEMORY, not_enough_memory);
186 MAP_ERR_TO_COND(ERROR_PATH_NOT_FOUND, no_such_file_or_directory);
187 MAP_ERR_TO_COND(ERROR_BAD_NETPATH, no_such_file_or_directory);
188 MAP_ERR_TO_COND(ERROR_READ_FAULT, io_error);
189 MAP_ERR_TO_COND(ERROR_RETRY, resource_unavailable_try_again);
190 MAP_ERR_TO_COND(ERROR_SEEK, io_error);
191 MAP_ERR_TO_COND(ERROR_SHARING_VIOLATION, permission_denied);
192 MAP_ERR_TO_COND(ERROR_TOO_MANY_OPEN_FILES, too_many_files_open);
193 MAP_ERR_TO_COND(ERROR_WRITE_FAULT, io_error);
194 MAP_ERR_TO_COND(ERROR_WRITE_PROTECT, permission_denied);
195 MAP_ERR_TO_COND(WSAEACCES, permission_denied);
196 MAP_ERR_TO_COND(WSAEBADF, bad_file_descriptor);
197 MAP_ERR_TO_COND(WSAEFAULT, bad_address);
198 MAP_ERR_TO_COND(WSAEINTR, interrupted);
199 MAP_ERR_TO_COND(WSAEINVAL, invalid_argument);
200 MAP_ERR_TO_COND(WSAEMFILE, too_many_files_open);
201 MAP_ERR_TO_COND(WSAENAMETOOLONG, filename_too_long);
203 return std::error_code(EV, std::system_category());
LLVM_ATTRIBUTE_NORETURN void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
static void bindingsErrorHandler(void *user_data, const std::string &reason, bool gen_crash_diag)
A raw_ostream that writes to an SmallVector or SmallString.
static void * ErrorHandlerUserData
std::string str() const
Return the twine contents as a std::string.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
void(* fatal_error_handler_t)(void *user_data, const std::string &reason, bool gen_crash_diag)
An error handler callback.
static fatal_error_handler_t ErrorHandler
void remove_fatal_error_handler()
Restores default error handling behaviour.
#define LLVM_EXTENSION
LLVM_EXTENSION - Support compilers where we have a keyword to suppress pedantic diagnostics.
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE size_t size() const
size - Get the string size.
Instances of this class acquire a given Mutex Lock when constructed and hold that lock until destruct...
void RunInterruptHandlers()
This function runs all the registered interrupt handlers, including the removal of files registered b...
std::error_code mapWindowsError(unsigned EV)
dot regions Print regions of function to dot file(with no function bodies)"
static void write(bool isBE, void *P, T V)
void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler)
Install a fatal error handler.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small...
StringRef str()
Return a StringRef for the vector contents.
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
LLVM_ATTRIBUTE_NORETURN void llvm_unreachable_internal(const char *msg=nullptr, const char *file=nullptr, unsigned line=0)
This function calls abort(), and prints the optional message to stderr.
static ManagedStatic< sys::Mutex > ErrorHandlerMutex
void LLVMResetFatalErrorHandler()
Reset the fatal error handler.
void(* LLVMFatalErrorHandler)(const char *Reason)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE const char * data() const
data - Get a pointer to the start of the string (which may not be null terminated).
StringRef - Represent a constant reference to a string, i.e.
ManagedStatic - This transparently changes the behavior of global statics to be lazily constructed on...
void install_fatal_error_handler(fatal_error_handler_t handler, void *user_data=nullptr)
install_fatal_error_handler - Installs a new error handler to be used whenever a serious (non-recover...