From 60dc36a680ff0f768647d928395e19e4fdffa68d Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 8 Aug 2016 16:37:00 -0600 Subject: [PATCH] st/mesa: define ST_NEW_ flags as uint64_t values, not enums MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit MSVC doesn't support 64-bit enum values, at least not with C code. The compiler was warning: c:\users\brian\projects\mesa\src\mesa\state_tracker\st_atom_list.h(43) : warning C4309: 'initializing' : truncation of constant value c:\users\brian\projects\mesa\src\mesa\state_tracker\st_atom_list.h(44) : warning C4309: 'initializing' : truncation of constant value ... And at runtime we crashed since the high 32-bits of the 'dirty' bitmask was always 0xffffffff and the 32+u_bit_scan() index went out of bounds of the atoms[] array. Reviewed-by: Marek Olšák Reviewed-by: Nicolai Hähnle --- src/mesa/state_tracker/st_atom.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mesa/state_tracker/st_atom.h b/src/mesa/state_tracker/st_atom.h index febd7ce..971ea35 100644 --- a/src/mesa/state_tracker/st_atom.h +++ b/src/mesa/state_tracker/st_atom.h @@ -68,12 +68,12 @@ enum { #undef ST_STATE }; -/* Define ST_NEW_xxx */ -enum { -#define ST_STATE(FLAG, st_update) FLAG = 1llu << FLAG##_INDEX, +/* Define ST_NEW_xxx values as static const uint64_t values. + * We can't use an enum type because MSVC doesn't allow 64-bit enum values. + */ +#define ST_STATE(FLAG, st_update) static const uint64_t FLAG = 1llu << FLAG##_INDEX; #include "st_atom_list.h" #undef ST_STATE -}; /* Add extern struct declarations. */ #define ST_STATE(FLAG, st_update) extern const struct st_tracked_state st_update; -- 2.7.4