forked from OSchip/llvm-project
report_fatal_error can't use errs(), because errs() can call
into report_fatal_error. Just blast the string to stderr with write(2) and hope for the best! Part of rdar://8318441 llvm-svn: 111320
This commit is contained in:
parent
83072afbcd
commit
6217082dc3
|
@ -18,8 +18,18 @@
|
|||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/System/Signals.h"
|
||||
#include "llvm/System/Threading.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include <cassert>
|
||||
#include <cstdlib>
|
||||
|
||||
#if defined(HAVE_UNISTD_H)
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
#if defined(_MSC_VER)
|
||||
# include <io.h>
|
||||
# include <fcntl.h>
|
||||
#endif
|
||||
|
||||
using namespace llvm;
|
||||
using namespace std;
|
||||
|
||||
|
@ -39,19 +49,27 @@ void llvm::remove_fatal_error_handler() {
|
|||
ErrorHandler = 0;
|
||||
}
|
||||
|
||||
void llvm::report_fatal_error(const char *reason) {
|
||||
report_fatal_error(Twine(reason));
|
||||
void llvm::report_fatal_error(const char *Reason) {
|
||||
report_fatal_error(Twine(Reason));
|
||||
}
|
||||
|
||||
void llvm::report_fatal_error(const std::string &reason) {
|
||||
report_fatal_error(Twine(reason));
|
||||
void llvm::report_fatal_error(const std::string &Reason) {
|
||||
report_fatal_error(Twine(Reason));
|
||||
}
|
||||
|
||||
void llvm::report_fatal_error(const Twine &reason) {
|
||||
if (!ErrorHandler) {
|
||||
errs() << "LLVM ERROR: " << reason << "\n";
|
||||
void llvm::report_fatal_error(const Twine &Reason) {
|
||||
if (ErrorHandler) {
|
||||
ErrorHandler(ErrorHandlerUserData, Reason.str());
|
||||
} else {
|
||||
ErrorHandler(ErrorHandlerUserData, reason.str());
|
||||
// Blast the result out to stderr. We don't try hard to make sure this
|
||||
// succeeds (e.g. handling EINTR) and we can't use errs() here because
|
||||
// raw ostreams can call report_fatal_error.
|
||||
SmallVector<char, 64> Buffer;
|
||||
StringRef ReasonStr = Reason.toStringRef(Buffer);
|
||||
|
||||
::write(2, "LLVM ERROR: ", 12);
|
||||
::write(2, ReasonStr.data(), ReasonStr.size());
|
||||
::write(2, "\n", 1);
|
||||
}
|
||||
|
||||
// If we reached here, we are failing ungracefully. Run the interrupt handlers
|
||||
|
|
Loading…
Reference in New Issue