Add a typecheck for the endianness conversions
[fio.git] / compiler / compiler.h
1 #ifndef FIO_COMPILER_H
2 #define FIO_COMPILER_H
3
4 #if __GNUC__ >= 4
5 #include "compiler-gcc4.h"
6 #elif __GNUC__ == 3
7 #include "compiler-gcc3.h"
8 #else
9 #error Compiler too old, need gcc at least gcc 3.x
10 #endif
11
12 #ifndef __must_check
13 #define __must_check
14 #endif
15
16 /*
17  * Mark unused variables passed to ops functions as unused, to silence gcc
18  */
19 #define fio_unused      __attribute__((__unused__))
20 #define fio_init        __attribute__((constructor))
21 #define fio_exit        __attribute__((destructor))
22
23 #define fio_unlikely(x) __builtin_expect(!!(x), 0)
24
25 /*
26  * Check at compile time that something is of a particular type.
27  * Always evaluates to 1 so you may use it easily in comparisons.
28  */
29 #define typecheck(type,x) \
30 ({      type __dummy; \
31         typeof(x) __dummy2; \
32         (void)(&__dummy == &__dummy2); \
33         1; \
34 })
35
36 #endif