[compiler-rt] r335087 - [asan] Add Windows test for handle_segv and SetUnhandledExceptionFilter

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 19 17:45:54 PDT 2018


Author: rnk
Date: Tue Jun 19 17:45:54 2018
New Revision: 335087

URL: http://llvm.org/viewvc/llvm-project?rev=335087&view=rev
Log:
[asan] Add Windows test for handle_segv and SetUnhandledExceptionFilter

Added:
    compiler-rt/trunk/test/asan/TestCases/Windows/user-exception.cc

Added: compiler-rt/trunk/test/asan/TestCases/Windows/user-exception.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Windows/user-exception.cc?rev=335087&view=auto
==============================================================================
--- compiler-rt/trunk/test/asan/TestCases/Windows/user-exception.cc (added)
+++ compiler-rt/trunk/test/asan/TestCases/Windows/user-exception.cc Tue Jun 19 17:45:54 2018
@@ -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;
+}




More information about the llvm-commits mailing list