diff --git a/lib/isc/include/isc/util.h b/lib/isc/include/isc/util.h index 97eb51a193..ecd9e8c52a 100644 --- a/lib/isc/include/isc/util.h +++ b/lib/isc/include/isc/util.h @@ -208,6 +208,18 @@ #define ISC_UNREACHABLE() #endif +#if !defined(__has_feature) +#define __has_feature(x) 0 +#endif + +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR >= 6) +#define STATIC_ASSERT(cond, msg) _Static_assert(cond, msg) +#elif __has_feature(c_static_assert) +#define STATIC_ASSERT(cond, msg) _Static_assert(cond, msg) +#else +#define STATIC_ASSERT(cond, msg) INSIST(cond) +#endif + #ifdef UNIT_TESTING extern void mock_assert(const int result, const char* const expression, const char * const file, const int line); diff --git a/lib/isc/mem.c b/lib/isc/mem.c index 0b72e41e8d..7a2691f481 100644 --- a/lib/isc/mem.c +++ b/lib/isc/mem.c @@ -747,7 +747,8 @@ isc_mem_createx(size_t init_max_size, size_t target_size, REQUIRE(memalloc != NULL); REQUIRE(memfree != NULL); - INSIST((ALIGNMENT_SIZE & (ALIGNMENT_SIZE - 1)) == 0); + STATIC_ASSERT((ALIGNMENT_SIZE & (ALIGNMENT_SIZE - 1)) == 0, + "wrong alignment size"); RUNTIME_CHECK(isc_once_do(&once, initialize_action) == ISC_R_SUCCESS);