diff options
author | Reid Kleckner <rnk@google.com> | 2018-06-20 00:45:54 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2018-06-20 00:45:54 +0000 |
commit | 386cdb7c257a4a04439f7c5b72d29bdd3e155520 (patch) | |
tree | 5cc01c8f4aa36bbfdd682be56aea71d85085496c /test | |
parent | d02ee7544cc2257a10f9250860d4c4d2207e5e31 (diff) |
[asan] Add Windows test for handle_segv and SetUnhandledExceptionFilter
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@335087 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/asan/TestCases/Windows/user-exception.cc | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/test/asan/TestCases/Windows/user-exception.cc b/test/asan/TestCases/Windows/user-exception.cc new file mode 100644 index 000000000..6824115f2 --- /dev/null +++ b/test/asan/TestCases/Windows/user-exception.cc @@ -0,0 +1,35 @@ +// RUN: %clang_cl_asan -O0 %s -Fe%t +// RUN: env ASAN_OPTIONS=handle_segv=0 %run %t 2>&1 | FileCheck %s --check-prefix=USER +// RUN: env ASAN_OPTIONS=handle_segv=1 not %run %t 2>&1 | FileCheck %s --check-prefix=ASAN +// Test the default. +// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=ASAN + +// This test exits zero when its unhandled exception filter is set. ASan should +// not disturb it when handle_segv=0. + +// USER: in main +// USER: in SEHHandler + +// ASAN: in main +// ASAN: ERROR: AddressSanitizer: access-violation + +#include <windows.h> +#include <stdio.h> + +static long WINAPI SEHHandler(EXCEPTION_POINTERS *info) { + DWORD exception_code = info->ExceptionRecord->ExceptionCode; + if (exception_code == EXCEPTION_ACCESS_VIOLATION) { + fprintf(stderr, "in SEHHandler\n"); + fflush(stdout); + TerminateProcess(GetCurrentProcess(), 0); + } + return EXCEPTION_CONTINUE_SEARCH; +} + +int main() { + SetUnhandledExceptionFilter(SEHHandler); + fprintf(stderr, "in main\n"); + + volatile int *p = nullptr; + *p = 42; +} |