From 634a8094f1648938211ab35d8998eac834e76bf5 Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Fri, 2 Mar 2018 00:05:05 -0500 Subject: [PATCH] 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. Backports commit f291887e8eef5d37d31484638f6e62401b4b99a2 from qemu --- qemu/include/qemu/compiler.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/qemu/include/qemu/compiler.h b/qemu/include/qemu/compiler.h index bdd0f2a7..32d9540c 100644 --- a/qemu/include/qemu/compiler.h +++ b/qemu/include/qemu/compiler.h @@ -61,10 +61,14 @@ static union MSVC_FLOAT_HACK __NAN = {{0x00, 0x00, 0xC0, 0x7F}}; #define cat(x,y) x ## y #define cat2(x,y) cat(x,y) +#define QEMU_BUILD_BUG_ON_STRUCT(x) \ + struct { \ + int:(x) ? -1 : 1; \ + } + #ifdef __COUNTER__ -#define QEMU_BUILD_BUG_ON(x) \ - typedef char glue(qemu_build_bug_on__, __COUNTER__)[(x) ? -1 : 1] \ - __attribute__((unused)) +#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \ + glue(qemu_build_bug_on__, __COUNTER__) __attribute__((unused)) #else #define QEMU_BUILD_BUG_ON(x) #endif