diff --git a/include/macros.h b/include/macros.h index 31240c89c..f3cd4846f 100644 --- a/include/macros.h +++ b/include/macros.h @@ -4,6 +4,20 @@ #include #include +// no return attribute +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #include + #define NORETURN noreturn +#elif defined(__cplusplus) && __cplusplus >= 201103L + #define NORETURN [[noreturn]] +#elif defined(_MSC_VER) + #define NORETURN __declspec(noreturn) +#elif defined(__GNUC__) || defined(__clang__) + #define NORETURN __attribute__((noreturn)) +#else + #define NORETURN +#endif + #ifndef __sgi #define GLOBAL_ASM(...) #endif diff --git a/src/port/Game.h b/src/port/Game.h index a457be7ad..fdd11c7a6 100644 --- a/src/port/Game.h +++ b/src/port/Game.h @@ -4,6 +4,7 @@ #include #include "engine/tracks/Track.h" #include "engine/HM_Intro.h" +#include "macros.h" #ifdef __cplusplus #include "engine/editor/Editor.h" @@ -235,17 +236,7 @@ void CM_ResetAudio(void); __attribute__((format(printf, 1, 2))) #endif -// Add noreturn attribute -#if defined(_MSC_VER) - __declspec(noreturn) -#elif defined(__APPLE__) -#elif defined(__OpenBSD__) -#elif defined(__cplusplus) || (__STDC_VERSION__ >= 202311) - [[noreturn]] -#elif defined(__GNUC__) - __attribute__((noreturn)) -#endif -void CM_ThrowRuntimeError(const char* fmt, ...); +NORETURN void CM_ThrowRuntimeError(const char* fmt, ...); // NOLINTEND(readability-identifier-naming)