From d3023547157783f6370cb9c8b39f0232ff1a4ced Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Mon, 9 Feb 2015 23:11:39 +0000 Subject: [PATCH] On Windows, we now use RaiseException to generate the kind of trap we require (one which calls our vectored exception handler), and fall back to using a volatile write to simulate a trap elsewhere. llvm-svn: 228628 --- llvm/include/llvm/Support/Compiler.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/llvm/include/llvm/Support/Compiler.h b/llvm/include/llvm/Support/Compiler.h index 77e442b..69c7446 100644 --- a/llvm/include/llvm/Support/Compiler.h +++ b/llvm/include/llvm/Support/Compiler.h @@ -287,6 +287,14 @@ /// which causes the program to exit abnormally. #if __has_builtin(__builtin_trap) || LLVM_GNUC_PREREQ(4, 3, 0) # define LLVM_BUILTIN_TRAP __builtin_trap() +#elif defined(LLVM_ON_WIN32) +extern "C" __declspec(dllimport) void __stdcall RaiseException( + unsigned long, unsigned long, unsigned long, const unsigned long *); +#define LLVM_BUILTIN_TRAP \ + do { \ + ::RaiseException(0xDEADD0D0, 0x1 /*EXCEPTION_NONCONTINUABLE*/, 0, nullptr);\ + __assume(false); \ + } while (0) #else # define LLVM_BUILTIN_TRAP *(volatile int*)0x11 = 0 #endif -- 2.7.4