ErrorHandling.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //===- lib/Support/ErrorHandling.cpp - 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 for error handling, it supersedes cerr+abort(), and
  11. // cerr+exit() style error handling.
  12. // Callbacks can be registered for these errors through this API.
  13. //===----------------------------------------------------------------------===//
  14. #include "llvm/ADT/SmallVector.h"
  15. #include "llvm/Support/ErrorHandling.h"
  16. #include "llvm/Support/raw_ostream.h"
  17. #include "llvm/System/Threading.h"
  18. #include <cassert>
  19. #include <cstdlib>
  20. using namespace llvm;
  21. using namespace std;
  22. static llvm_error_handler_t ErrorHandler = 0;
  23. namespace llvm {
  24. void llvm_install_error_handler(llvm_error_handler_t handler) {
  25. assert(!llvm_is_multithreaded() &&
  26. "Cannot register error handlers after starting multithreaded mode!\n");
  27. assert(!ErrorHandler && "Error handler already registered!\n");
  28. ErrorHandler = handler;
  29. }
  30. void llvm_remove_error_handler(void) {
  31. ErrorHandler = 0;
  32. }
  33. void llvm_report_error(const std::string &reason) {
  34. if (!ErrorHandler) {
  35. errs() << "LLVM ERROR: " << reason << "\n";
  36. } else {
  37. ErrorHandler(reason);
  38. }
  39. exit(1);
  40. }
  41. void llvm_unreachable(const char *msg) {
  42. if (msg)
  43. errs() << msg << "\n";
  44. abort();
  45. }
  46. }