X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=compiler%2Fcompiler.h;h=40e857c004c6e4304565ad1e446b4bffaf90eb35;hp=33500a9b02a53c4259c307d69fff96d8c7369646;hb=029716a2f67245a6aad59cf8b52261fa39c8a07f;hpb=7ed4d7abf0d7720d532d9680ebf69745d9270a5e diff --git a/compiler/compiler.h b/compiler/compiler.h index 33500a9b..40e857c0 100644 --- a/compiler/compiler.h +++ b/compiler/compiler.h @@ -13,14 +13,46 @@ #define __must_check #endif -#define uninitialized_var(x) x = x +/* + * Mark unused variables passed to ops functions as unused, to silence gcc + */ +#define fio_unused __attribute__((__unused__)) +#define fio_init __attribute__((constructor)) +#define fio_exit __attribute__((destructor)) -#ifndef __weak -#ifndef __CYGWIN__ -#define __weak __attribute__((weak)) -#else -#define __weak +#define fio_unlikely(x) __builtin_expect(!!(x), 0) + +/* + * Check at compile time that something is of a particular type. + * Always evaluates to 1 so you may use it easily in comparisons. + */ +#define typecheck(type,x) \ +({ type __dummy; \ + typeof(x) __dummy2; \ + (void)(&__dummy == &__dummy2); \ + 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