From: Martin Willi Date: Fri, 4 Jul 2014 12:35:27 +0000 (+0200) Subject: utils: Add some initial build time assertion macros X-Git-Tag: 5.2.1dr1~100 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb6be261974788d971226d7508bcbc49af86e96e;p=thirdparty%2Fstrongswan.git utils: Add some initial build time assertion macros These are useful to assert constants during build time. We evaluate the expression to 0 when valid, so we can safely use the evaluated value. --- diff --git a/src/libstrongswan/utils/utils.h b/src/libstrongswan/utils/utils.h index 1b822dd610..cb60c6e3e2 100644 --- a/src/libstrongswan/utils/utils.h +++ b/src/libstrongswan/utils/utils.h @@ -59,6 +59,20 @@ */ #define BUF_LEN 512 +/** + * Build assertion macro for integer expressions, evaluates to 0 + */ +#define BUILD_ASSERT(x) (sizeof(char[(x) ? 0 : -1])) + +/** + * Build time check to assert a is an array, evaluates to 0 + * + * The address of an array element has a pointer type, which is not compatible + * to the array type. + */ +#define BUILD_ASSERT_ARRAY(a) \ + BUILD_ASSERT(!__builtin_types_compatible_p(typeof(a), typeof(&(a)[0]))) + /** * General purpose boolean type. */