Reviewed-by: Marek Olšák <[email protected]> Marek
On Tue, Aug 9, 2016 at 12:41 AM, Brian Paul <[email protected]> wrote: > 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. > --- > 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; > -- > 1.9.1 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
