|
|
@ -17,11 +17,12 @@ |
|
|
// enough for our purposes. |
|
|
// enough for our purposes. |
|
|
template <typename Fn> |
|
|
template <typename Fn> |
|
|
#if defined(_MSC_VER) |
|
|
#if defined(_MSC_VER) |
|
|
__declspec(noinline, noreturn) |
|
|
|
|
|
|
|
|
[[msvc::noinline, noreturn]] |
|
|
#elif defined(__GNUC__) |
|
|
#elif defined(__GNUC__) |
|
|
__attribute__((noinline, noreturn, cold)) |
|
|
|
|
|
|
|
|
[[gnu::cold, gnu::noinline, noreturn]] |
|
|
#endif |
|
|
#endif |
|
|
static void assert_noinline_call(const Fn& fn) { |
|
|
|
|
|
|
|
|
static void |
|
|
|
|
|
assert_noinline_call(const Fn& fn) { |
|
|
fn(); |
|
|
fn(); |
|
|
Crash(); |
|
|
Crash(); |
|
|
exit(1); // Keeps GCC's mouth shut about this actually returning |
|
|
exit(1); // Keeps GCC's mouth shut about this actually returning |
|
|
|