ErrorHandling.h revision b6017b03dab80e1e7bfeec4e7debff0fefa9563e
1//===- llvm/Support/ErrorHandling.h - Callbacks for errors ------*- 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// This file defines an API used to indicate error conditions. 11// Callbacks can be registered for these errors through this API. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_SUPPORT_ERRORHANDLING_H 16#define LLVM_SUPPORT_ERRORHANDLING_H 17 18#include "llvm/Support/Compiler.h" 19#include <string> 20 21namespace llvm { 22 /// An error handler callback. 23 typedef void (*llvm_error_handler_t)(const std::string& reason); 24 25 /// Installs a new error handler: this function will be called whenever a 26 /// serious error is encountered by LLVM. 27 /// If you are using llvm_start_multithreaded, you should register the handler 28 /// before doing that. 29 /// 30 /// If no error handler is installed the default is to print the error message 31 /// to stderr, and call exit(1). 32 /// If an error handler is installed then it is the handler's responsibility 33 /// to log the message, it will no longer be printed to stderr. 34 /// If the error handler returns, then exit(1) will be called. 35 void llvm_install_error_handler(llvm_error_handler_t handler); 36 37 /// Restores default error handling behaviour. 38 /// This must not be called between llvm_start_multithreaded() and 39 /// llvm_stop_multithreaded(). 40 void llvm_remove_error_handler(void); 41 42 /// Reports a serious error, calling any installed error handler. 43 /// If no error handler is installed the default is to print the message to 44 void llvm_report_error(const std::string &reason) NORETURN; 45 46 /// This function calls abort(). 47 /// Call this after assert(0), so that compiler knows the path is not 48 /// reachable. 49 void llvm_unreachable(void) NORETURN; 50} 51 52#endif 53 54