util: Allow STATIC_ASSERT() everywhere

Remove -Werror=vla from c_msvc_compat_args so we can use STATIC_ASSERT()
in core code.  We have a CI job for this.

(And arguably we could probably just drop c_msvc_compat_args entirely.)

Signed-off-by: Rob Clark <robdclark@chromium.org>
Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7941>
This commit is contained in:
Rob Clark 2020-12-05 12:46:43 -08:00 committed by Marge Bot
parent 5a082911cd
commit 6fe84c5dda
3 changed files with 18 additions and 6 deletions

View File

@ -1090,7 +1090,7 @@ else
# Check for C and C++ arguments for MSVC compatibility. These are only used
# in parts of the mesa code base that need to compile with MSVC, mainly
# common code
foreach a : ['-Werror=pointer-arith', '-Werror=vla', '-Werror=gnu-empty-initializer']
foreach a : ['-Werror=pointer-arith', '-Werror=gnu-empty-initializer']
if cc.has_argument(a)
c_msvc_compat_args += a
endif

View File

@ -86,7 +86,6 @@ def install_shared_library(env, sources, version = ()):
def msvc2013_compat(env):
if env['gcc']:
env.Append(CCFLAGS = [
'-Werror=vla',
'-Werror=pointer-arith',
])

View File

@ -66,13 +66,26 @@
/**
* Static (compile-time) assertion.
* Basically, use COND to dimension an array. If COND is false/zero the
* array size will be -1 and we'll get a compilation error.
*/
#define STATIC_ASSERT(COND) \
do { \
#if defined(_MSC_VER)
/* MSVC doesn't like VLA's, but it also dislikes zero length arrays
* (which gcc is happy with), so we have to define STATIC_ASSERT()
* slightly differently.
*/
# define STATIC_ASSERT(COND) do { \
(void) sizeof(char [(COND) != 0]); \
} while (0)
#elif defined(__GNUC__)
/* This version of STATIC_ASSERT() relies on VLAs. If COND is
* false/zero, the array size will be -1 and we'll get a compile
* error
*/
# define STATIC_ASSERT(COND) do { \
(void) sizeof(char [1 - 2*!(COND)]); \
} while (0)
#else
# define STATIC_ASSERT(COND) do { } while (0)
#endif
/**