forked from OSchip/llvm-project
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
This commit is contained in:
parent
4282e7cffd
commit
d302354715
|
@ -287,6 +287,14 @@
|
||||||
/// which causes the program to exit abnormally.
|
/// which causes the program to exit abnormally.
|
||||||
#if __has_builtin(__builtin_trap) || LLVM_GNUC_PREREQ(4, 3, 0)
|
#if __has_builtin(__builtin_trap) || LLVM_GNUC_PREREQ(4, 3, 0)
|
||||||
# define LLVM_BUILTIN_TRAP __builtin_trap()
|
# 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
|
#else
|
||||||
# define LLVM_BUILTIN_TRAP *(volatile int*)0x11 = 0
|
# define LLVM_BUILTIN_TRAP *(volatile int*)0x11 = 0
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue