cleanup: Use _Static_assert in gcc/clang.

Hopefully they don't throw warnings at us.
This commit is contained in:
iphydf 2022-03-27 17:36:04 +00:00
parent bc006beb4e
commit 96ab8918dc
No known key found for this signature in database
GPG Key ID: 3855DBA2D74403C9
2 changed files with 9 additions and 3 deletions

View File

@ -20,6 +20,11 @@ add_ld_flag -undefined error
# Make compilation error on a warning # Make compilation error on a warning
add_flag -Werror add_flag -Werror
# Allow _Static_assert. Supported C11 extensions are fine, since we have several
# C99-only compilers we test against anyway. Anything that passes all the
# compilers we use is fine.
add_c_flag -Wno-c11-extensions
cmake -B_build -H. \ cmake -B_build -H. \
-DCMAKE_C_FLAGS="$C_FLAGS" \ -DCMAKE_C_FLAGS="$C_FLAGS" \
-DCMAKE_CXX_FLAGS="$CXX_FLAGS" \ -DCMAKE_CXX_FLAGS="$CXX_FLAGS" \

View File

@ -67,11 +67,12 @@
#if !defined(__cplusplus) || __cplusplus < 201103L #if !defined(__cplusplus) || __cplusplus < 201103L
#define nullptr NULL #define nullptr NULL
#ifndef static_assert #ifndef static_assert
#ifdef __GNUC__
// We'll just assume gcc and clang support C11 _Static_assert.
#define static_assert _Static_assert
#else // !__GNUC__
#define STATIC_ASSERT_(cond, msg, line) typedef int static_assert_##line[(cond) ? 1 : -1] #define STATIC_ASSERT_(cond, msg, line) typedef int static_assert_##line[(cond) ? 1 : -1]
#define STATIC_ASSERT(cond, msg, line) STATIC_ASSERT_(cond, msg, line) #define STATIC_ASSERT(cond, msg, line) STATIC_ASSERT_(cond, msg, line)
#ifdef __GNUC__
#define static_assert(cond, msg) __attribute__((__unused__)) STATIC_ASSERT(cond, msg, __LINE__)
#else // !__GNUC__
#define static_assert(cond, msg) STATIC_ASSERT(cond, msg, __LINE__) #define static_assert(cond, msg) STATIC_ASSERT(cond, msg, __LINE__)
#endif // !__GNUC__ #endif // !__GNUC__
#endif // !static_assert #endif // !static_assert