[Mesa-dev] [PATCH] st/mesa: define ST_NEW_ flags as uint64_t values, not enums

Nicolai Hähnle nhaehnle at gmail.com
Tue Aug 9 08:22:23 UTC 2016


Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

On 09.08.2016 00:41, Brian Paul 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;
>


More information about the mesa-dev mailing list