Add some build assert macros
authorJens Axboe <axboe@fb.com>
Mon, 20 Oct 2014 16:51:24 +0000 (10:51 -0600)
committerJens Axboe <axboe@fb.com>
Mon, 20 Oct 2014 16:51:24 +0000 (10:51 -0600)
Stolen from the linux kernel.

Signed-off-by: Jens Axboe <axboe@fb.com>
compiler/compiler.h

index e1afcb424b8efa06380311cd1e865df3fb6f0d64..40e857c004c6e4304565ad1e446b4bffaf90eb35 100644 (file)
        1; \
 })
 
        1; \
 })
 
+#ifndef __compiletime_error
+#define __compiletime_error(message)
+#endif
+#ifndef __compiletime_error_fallback
+#define __compiletime_error_fallback(condition)        do { } while (0)
+#endif
+
+#define __compiletime_assert(condition, msg, prefix, suffix)           \
+       do {                                                            \
+               int __cond = !(condition);                              \
+               extern void prefix ## suffix(void) __compiletime_error(msg); \
+               if (__cond)                                             \
+                       prefix ## suffix();                             \
+               __compiletime_error_fallback(__cond);                   \
+       } while (0)
+
+#define _compiletime_assert(condition, msg, prefix, suffix) \
+       __compiletime_assert(condition, msg, prefix, suffix)
+
+#define compiletime_assert(condition, msg) \
+       _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
+
 #endif
 #endif