mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-03-23 06:25:12 +00:00
compiler: expression version of QEMU_BUILD_BUG_ON
QEMU_BUILD_BUG_ON uses a typedef in order to be safe to use outside functions, but sometimes it's useful to have a version that can be used within an expression. Following what Linux does, introduce QEMU_BUILD_BUG_ON_ZERO that return zero after checking condition at build time. Backports commit d757573e69f2ef58a4a7b41f6c55d65fa1e1c5c2 from qemu
This commit is contained in:
parent
634a8094f1
commit
ac013df0a2
|
@ -68,11 +68,14 @@ static union MSVC_FLOAT_HACK __NAN = {{0x00, 0x00, 0xC0, 0x7F}};
|
|||
|
||||
#ifdef __COUNTER__
|
||||
#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
|
||||
glue(qemu_build_bug_on__, __COUNTER__) __attribute__((unused))
|
||||
glue(qemu_build_bug_on__, __COUNTER__) QEMU_UNUSED_VAR
|
||||
#else
|
||||
#define QEMU_BUILD_BUG_ON(x)
|
||||
#endif
|
||||
|
||||
#define QEMU_BUILD_BUG_ON_ZERO(x) (sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)) - \
|
||||
sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)))
|
||||
|
||||
#define GCC_FMT_ATTR(n, m)
|
||||
|
||||
#else
|
||||
|
@ -172,8 +175,20 @@ static union MSVC_FLOAT_HACK __NAN = {{0x00, 0x00, 0xC0, 0x7F}};
|
|||
#define inline always_inline
|
||||
#endif
|
||||
|
||||
#define QEMU_BUILD_BUG_ON(x) \
|
||||
typedef char glue(qemu_build_bug_on__,__LINE__)[(x)?-1:1] __attribute__((unused));
|
||||
#define QEMU_BUILD_BUG_ON_STRUCT(x) \
|
||||
struct { \
|
||||
int:(x) ? -1 : 1; \
|
||||
}
|
||||
|
||||
#ifdef __COUNTER__
|
||||
#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
|
||||
glue(qemu_build_bug_on__, __COUNTER__) QEMU_UNUSED_VAR
|
||||
#else
|
||||
#define QEMU_BUILD_BUG_ON(x)
|
||||
#endif
|
||||
|
||||
#define QEMU_BUILD_BUG_ON_ZERO(x) (sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)) - \
|
||||
sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)))
|
||||
|
||||
#if defined __GNUC__
|
||||
# if !QEMU_GNUC_PREREQ(4, 4)
|
||||
|
|
Loading…
Reference in a new issue