compiler: Add QEMU_BUILD_BUG_MSG() macro
_Static_assert() allows us to specify messages, and that may come in handy. Even without _Static_assert(), encouraging developers to put a helpful message next to the QEMU_BUILD_BUG_* may make debugging easier whenever it breaks. Signed-off-by: Max Reitz <mreitz@redhat.com> Message-Id: <20180224154033.29559-2-mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Alberto Garcia <berto@igalia.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
7d0f982bfb
commit
9139b56723
@ -82,15 +82,21 @@
|
|||||||
int:(x) ? -1 : 1; \
|
int:(x) ? -1 : 1; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* QEMU_BUILD_BUG_MSG() emits the message given if _Static_assert is
|
||||||
|
* supported; otherwise, it will be omitted from the compiler error
|
||||||
|
* message (but as it remains present in the source code, it can still
|
||||||
|
* be useful when debugging). */
|
||||||
#if defined(CONFIG_STATIC_ASSERT)
|
#if defined(CONFIG_STATIC_ASSERT)
|
||||||
#define QEMU_BUILD_BUG_ON(x) _Static_assert(!(x), "not expecting: " #x)
|
#define QEMU_BUILD_BUG_MSG(x, msg) _Static_assert(!(x), msg)
|
||||||
#elif defined(__COUNTER__)
|
#elif defined(__COUNTER__)
|
||||||
#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
|
#define QEMU_BUILD_BUG_MSG(x, msg) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
|
||||||
glue(qemu_build_bug_on__, __COUNTER__) __attribute__((unused))
|
glue(qemu_build_bug_on__, __COUNTER__) __attribute__((unused))
|
||||||
#else
|
#else
|
||||||
#define QEMU_BUILD_BUG_ON(x)
|
#define QEMU_BUILD_BUG_MSG(x, msg)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define QEMU_BUILD_BUG_ON(x) QEMU_BUILD_BUG_MSG(x, "not expecting: " #x)
|
||||||
|
|
||||||
#define QEMU_BUILD_BUG_ON_ZERO(x) (sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)) - \
|
#define QEMU_BUILD_BUG_ON_ZERO(x) (sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)) - \
|
||||||
sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)))
|
sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user