utils: Add some initial build time assertion macros
authorMartin Willi <martin@revosec.ch>
Fri, 4 Jul 2014 12:35:27 +0000 (14:35 +0200)
committerMartin Willi <martin@revosec.ch>
Mon, 25 Aug 2014 07:48:53 +0000 (09:48 +0200)
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.

src/libstrongswan/utils/utils.h

index 1b822dd..cb60c6e 100644 (file)
 #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.
  */
 #ifdef HAVE_STDBOOL_H