X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=compiler%2Fcompiler.h;h=20df21d050c3ba7941e705bf51140430dd7b237a;hb=a6415d76bd7256a5b9fccc51858da776b3c513aa;hp=e1afcb424b8efa06380311cd1e865df3fb6f0d64;hpb=ff8039b745d59ede0ce9245ed24da14ecf2d3f38;p=fio.git diff --git a/compiler/compiler.h b/compiler/compiler.h index e1afcb42..20df21d0 100644 --- a/compiler/compiler.h +++ b/compiler/compiler.h @@ -1,5 +1,6 @@ #ifndef FIO_COMPILER_H #define FIO_COMPILER_H +#include #if __GNUC__ >= 4 #include "compiler-gcc4.h" @@ -33,4 +34,39 @@ 1; \ }) + +#if defined(CONFIG_STATIC_ASSERT) +#define compiletime_assert(condition, msg) _Static_assert(condition, msg) + +#elif !defined(CONFIG_DISABLE_OPTIMIZATIONS) + +#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__) + +#else + +#define compiletime_assert(condition, msg) do { } while (0) + +#endif + #endif