mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Add a magic LLVM_DISABLE_CRT_DEBUG environment variable which we check in RegisterHandler and use to disable the Win32 crash dialogs. These are a major blocker to any kind of automated testing.
Also, tweak the 'lit' test runner to set this variable unconditionally. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82537 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dace0ed8c7
commit
df3388492b
@ -43,6 +43,7 @@ static std::vector<llvm::sys::Path> *FilesToRemove = NULL;
|
||||
static std::vector<std::pair<void(*)(void*), void*> > *CallBacksToRun = 0;
|
||||
static bool RegisteredUnhandledExceptionFilter = false;
|
||||
static bool CleanupExecuted = false;
|
||||
static bool ExitOnUnhandledExceptions = false;
|
||||
static PTOP_LEVEL_EXCEPTION_FILTER OldFilter = NULL;
|
||||
|
||||
// Windows creates a new thread to execute the console handler when an event
|
||||
@ -57,8 +58,36 @@ namespace llvm {
|
||||
//=== and must not be UNIX code
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// CRTReportHook - Function called on a CRT debugging event.
|
||||
static int CRTReportHook(int ReportType, char *Message, int *Return) {
|
||||
// Don't cause a DebugBreak() on return.
|
||||
if (Return)
|
||||
*Return = 0;
|
||||
|
||||
static void RegisterHandler() {
|
||||
switch (ReportType) {
|
||||
default:
|
||||
case _CRT_ASSERT:
|
||||
fprintf(stderr, "CRT assert: %s\n", Message);
|
||||
// FIXME: Is there a way to just crash? Perhaps throw to the unhandled
|
||||
// exception code? Perhaps SetErrorMode() handles this.
|
||||
_exit(3);
|
||||
break;
|
||||
case _CRT_ERROR:
|
||||
fprintf(stderr, "CRT error: %s\n", Message);
|
||||
// FIXME: Is there a way to just crash? Perhaps throw to the unhandled
|
||||
// exception code? Perhaps SetErrorMode() handles this.
|
||||
_exit(3);
|
||||
break;
|
||||
case _CRT_WARN:
|
||||
fprintf(stderr, "CRT warn: %s\n", Message);
|
||||
break;
|
||||
}
|
||||
|
||||
// Don't call _CrtDbgReport.
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void RegisterHandler() {
|
||||
if (RegisteredUnhandledExceptionFilter) {
|
||||
EnterCriticalSection(&CriticalSection);
|
||||
return;
|
||||
@ -76,6 +105,12 @@ static void RegisterHandler() {
|
||||
OldFilter = SetUnhandledExceptionFilter(LLVMUnhandledExceptionFilter);
|
||||
SetConsoleCtrlHandler(LLVMConsoleCtrlHandler, TRUE);
|
||||
|
||||
// Environment variable to disable any kind of crash dialog.
|
||||
if (getenv("LLVM_DISABLE_CRT_DEBUG")) {
|
||||
_CrtSetReportHook(CRTReportHook);
|
||||
ExitOnUnhandledExceptions = true;
|
||||
}
|
||||
|
||||
// IMPORTANT NOTE: Caller must call LeaveCriticalSection(&CriticalSection) or
|
||||
// else multi-threading problems will ensue.
|
||||
}
|
||||
@ -235,6 +270,9 @@ static LONG WINAPI LLVMUnhandledExceptionFilter(LPEXCEPTION_POINTERS ep) {
|
||||
assert(0 && "Crashed in LLVMUnhandledExceptionFilter");
|
||||
}
|
||||
|
||||
if (ExitOnUnhandledExceptions)
|
||||
_exit(-3);
|
||||
|
||||
// Allow dialog box to pop up allowing choice to start debugger.
|
||||
if (OldFilter)
|
||||
return (*OldFilter)(ep);
|
||||
|
@ -13,6 +13,7 @@ class TestingConfig:
|
||||
'PATH' : os.pathsep.join(litConfig.path +
|
||||
[os.environ.get('PATH','')]),
|
||||
'SYSTEMROOT' : os.environ.get('SYSTEMROOT',''),
|
||||
'LLVM_DISABLE_CRT_DEBUG' : '1',
|
||||
}
|
||||
|
||||
config = TestingConfig(parent,
|
||||
|
Loading…
Reference in New Issue
Block a user