From c3b63e60baf7f42295b7ba6f991f9bd943cf8d1a Mon Sep 17 00:00:00 2001 From: mcc Date: Sun, 5 Mar 2023 19:16:59 -0500 Subject: [PATCH] Create LOVR_NORETURN abstracting the contradictory noreturn implementations in C11 and C++11 --- src/util.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/util.h b/src/util.h index 22d0cdb2..9b75bcab 100644 --- a/src/util.h +++ b/src/util.h @@ -15,6 +15,12 @@ #define LOVR_THREAD_LOCAL __thread #endif +#ifdef __cplusplus +#define LOVR_NORETURN [[noreturn]] +#else +#define LOVR_NORETURN _Noreturn +#endif + #ifndef M_PI #define M_PI 3.14159265358979 #endif @@ -30,7 +36,7 @@ // Error handling typedef void errorFn(void*, const char*, va_list); void lovrSetErrorCallback(errorFn* callback, void* userdata); -_Noreturn void lovrThrow(const char* format, ...); +LOVR_NORETURN void lovrThrow(const char* format, ...); #define lovrAssert(c, ...) if (!(c)) { lovrThrow(__VA_ARGS__); } #define lovrUnreachable() lovrThrow("Unreachable")