compiler: rework BUG_ON using a struct
There are theoretical concerns that some compilers might not trigger build failures on attempts to define an array of size (x ? -1 : 1) where x is a variable and make it a variable sized array instead. Let rewrite using a struct with a negative bit field size instead as there are no dynamic bit field sizes. This is similar to what Linux does. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
60abf0a5e0
commit
f291887e8e
|
@ -85,10 +85,14 @@
|
||||||
#define typeof_field(type, field) typeof(((type *)0)->field)
|
#define typeof_field(type, field) typeof(((type *)0)->field)
|
||||||
#define type_check(t1,t2) ((t1*)0 - (t2*)0)
|
#define type_check(t1,t2) ((t1*)0 - (t2*)0)
|
||||||
|
|
||||||
|
#define QEMU_BUILD_BUG_ON_STRUCT(x) \
|
||||||
|
struct { \
|
||||||
|
int:(x) ? -1 : 1; \
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __COUNTER__
|
#ifdef __COUNTER__
|
||||||
#define QEMU_BUILD_BUG_ON(x) \
|
#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
|
||||||
typedef char glue(qemu_build_bug_on__, __COUNTER__)[(x) ? -1 : 1] \
|
glue(qemu_build_bug_on__, __COUNTER__) __attribute__((unused))
|
||||||
__attribute__((unused))
|
|
||||||
#else
|
#else
|
||||||
#define QEMU_BUILD_BUG_ON(x)
|
#define QEMU_BUILD_BUG_ON(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue