mesa: fix MSVC bitshift overflow warnings
authorBrian Paul <brianp@vmware.com>
Fri, 30 Mar 2018 15:06:01 +0000 (09:06 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 30 Mar 2018 17:04:32 +0000 (11:04 -0600)
In the BITFIELD_MASK() macro, if b==32 the expression evaluates to
~0u, but the compiler still sees the expression (1 << 32) in the
unused part and issues a warning about integer bitshift overflow.

Fix that by using (b) % 32 to ensure the max shift is 31 bits.

This issue has been present for a while, but shows up much more
often because of the recent VBO changes.

Reviewed-by: Mathias Fröhlich <mathias.froehlich@web.de>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/mesa/main/mtypes.h

index 801bd17666fef00a779f7ed4f2a25801bc740988..b7a7b34a090035cebca56d23f52e1ef240460af8 100644 (file)
@@ -59,7 +59,7 @@ extern "C" {
 #define BITFIELD_BIT(b)      ((GLbitfield)1 << (b))
 /** Set all bits up to excluding bit b */
 #define BITFIELD_MASK(b)      \
-   ((b) == 32 ? (~(GLbitfield)0) : BITFIELD_BIT(b) - 1)
+   ((b) == 32 ? (~(GLbitfield)0) : BITFIELD_BIT((b) % 32) - 1)
 /** Set count bits starting from bit b  */
 #define BITFIELD_RANGE(b, count) \
    (BITFIELD_MASK((b) + (count)) & ~BITFIELD_MASK(b))