[llvm] r228628 - 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.
Aaron Ballman
aaron at aaronballman.com
Mon Feb 9 15:11:39 PST 2015
Author: aaronballman
Date: Mon Feb 9 17:11:39 2015
New Revision: 228628
URL: http://llvm.org/viewvc/llvm-project?rev=228628&view=rev
Log:
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.
Modified:
llvm/trunk/include/llvm/Support/Compiler.h
Modified: llvm/trunk/include/llvm/Support/Compiler.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Compiler.h?rev=228628&r1=228627&r2=228628&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/Compiler.h (original)
+++ llvm/trunk/include/llvm/Support/Compiler.h Mon Feb 9 17:11:39 2015
@@ -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
More information about the llvm-commits
mailing list