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:
@@ -1090,7 +1090,7 @@ else
|
|||||||
# Check for C and C++ arguments for MSVC compatibility. These are only used
|
# 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
|
# in parts of the mesa code base that need to compile with MSVC, mainly
|
||||||
# common code
|
# 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)
|
if cc.has_argument(a)
|
||||||
c_msvc_compat_args += a
|
c_msvc_compat_args += a
|
||||||
endif
|
endif
|
||||||
|
@@ -86,7 +86,6 @@ def install_shared_library(env, sources, version = ()):
|
|||||||
def msvc2013_compat(env):
|
def msvc2013_compat(env):
|
||||||
if env['gcc']:
|
if env['gcc']:
|
||||||
env.Append(CCFLAGS = [
|
env.Append(CCFLAGS = [
|
||||||
'-Werror=vla',
|
|
||||||
'-Werror=pointer-arith',
|
'-Werror=pointer-arith',
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@@ -66,13 +66,26 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Static (compile-time) assertion.
|
* 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) \
|
#if defined(_MSC_VER)
|
||||||
do { \
|
/* 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)]); \
|
(void) sizeof(char [1 - 2*!(COND)]); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
#else
|
||||||
|
# define STATIC_ASSERT(COND) do { } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user