diff options
author | Henrik Gramner <gramner@twoorioles.com> | 2024-05-12 17:12:18 +0200 |
---|---|---|
committer | Henrik Gramner <gramner@twoorioles.com> | 2024-05-13 14:01:17 +0200 |
commit | cc1137c85b5cc7e082e7040f4160e5a6da1f06ff (patch) | |
tree | 704de38ae09a0e93455b5ee3bf8664f19ab66302 | |
parent | 471549f2681d525a148b54085fcbba9e48e532c4 (diff) | |
download | libdav1d-cc1137c85b5cc7e082e7040f4160e5a6da1f06ff.tar.gz |
checkasm: Eliminate unreachable code in the Windows exception handler
-rw-r--r-- | tests/checkasm/checkasm.c | 53 |
1 files changed, 26 insertions, 27 deletions
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index e071cc4..2faa01f 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -543,34 +543,33 @@ checkasm_context checkasm_context_buf; #ifdef _WIN32 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) static LONG NTAPI signal_handler(EXCEPTION_POINTERS *const e) { - if (state.sig != SIG_ATOMIC_MAX) - return EXCEPTION_CONTINUE_SEARCH; - - int s; - switch (e->ExceptionRecord->ExceptionCode) { - case EXCEPTION_FLT_DIVIDE_BY_ZERO: - case EXCEPTION_INT_DIVIDE_BY_ZERO: - s = SIGFPE; - break; - case EXCEPTION_ILLEGAL_INSTRUCTION: - case EXCEPTION_PRIV_INSTRUCTION: - s = SIGILL; - break; - case EXCEPTION_ACCESS_VIOLATION: - case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: - case EXCEPTION_DATATYPE_MISALIGNMENT: - case EXCEPTION_STACK_OVERFLOW: - s = SIGSEGV; - break; - case EXCEPTION_IN_PAGE_ERROR: - s = SIGBUS; - break; - default: - return EXCEPTION_CONTINUE_SEARCH; + if (state.sig == SIG_ATOMIC_MAX) { + int s; + switch (e->ExceptionRecord->ExceptionCode) { + case EXCEPTION_FLT_DIVIDE_BY_ZERO: + case EXCEPTION_INT_DIVIDE_BY_ZERO: + s = SIGFPE; + break; + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_PRIV_INSTRUCTION: + s = SIGILL; + break; + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_STACK_OVERFLOW: + s = SIGSEGV; + break; + case EXCEPTION_IN_PAGE_ERROR: + s = SIGBUS; + break; + default: + return EXCEPTION_CONTINUE_SEARCH; + } + state.sig = s; + checkasm_load_context(); } - state.sig = s; - checkasm_load_context(); - return EXCEPTION_CONTINUE_EXECUTION; /* never reached, but shuts up gcc */ + return EXCEPTION_CONTINUE_SEARCH; } #endif #else |