gallium: fix various undefined left shifts into sign bit
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Sat, 30 Apr 2016 02:56:25 +0000 (21:56 -0500)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Sat, 7 May 2016 21:46:59 +0000 (16:46 -0500)
Funnily enough, some of these were turned into a compile-time error by gcc
with -fsanitize=undefined ("initializer is not a constant").

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/auxiliary/tgsi/tgsi_ureg.c
src/gallium/auxiliary/util/u_pack_color.h
src/gallium/auxiliary/util/u_pstipple.c
src/gallium/drivers/softpipe/sp_quad_stipple.c
src/mesa/state_tracker/st_mesa_to_tgsi.c
src/mesa/state_tracker/st_program.c

index 021b81f38742d982c2b3599c363c8fc44d150206..43b8bb10f1cf39e83d5bcc8f10023f2804aac040 100644 (file)
@@ -1735,7 +1735,7 @@ static void emit_decls( struct ureg_program *ureg )
 
    if (ureg->processor == PIPE_SHADER_VERTEX) {
       for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
-         if (ureg->vs_inputs[i/32] & (1 << (i%32))) {
+         if (ureg->vs_inputs[i/32] & (1u << (i%32))) {
             emit_decl_range( ureg, TGSI_FILE_INPUT, i, 1 );
          }
       }
index b882502b7bac9295cf3101cef73af1ff09a1da13..f9f41609b44b1f0ae4e29ac8ec9ad658e539f186 100644 (file)
@@ -367,7 +367,7 @@ util_pack_color(const float rgba[4], enum pipe_format format, union util_color *
       return;
    case PIPE_FORMAT_BGRX8888_UNORM:
       {
-         uc->ui[0] = (0xff << 24) | (r << 16) | (g << 8) | b;
+         uc->ui[0] = (0xffu << 24) | (r << 16) | (g << 8) | b;
       }
       return;
    case PIPE_FORMAT_ARGB8888_UNORM:
index 3ae8923f953a637352fc1738b0666d46ae7bb5d5..f6ea535c41376681c777a48374b7376fdf377f46 100644 (file)
@@ -63,7 +63,7 @@ util_pstipple_update_stipple_texture(struct pipe_context *pipe,
                                      struct pipe_resource *tex,
                                      const uint32_t pattern[32])
 {
-   static const uint bit31 = 1 << 31;
+   static const uint bit31 = 1u << 31;
    struct pipe_transfer *transfer;
    ubyte *data;
    int i, j;
index a0527a596a64114398641d6c14f6999e7a6f285e..4b29c2eb221b926729889727917351eb050f7eac 100644 (file)
@@ -16,8 +16,8 @@
 static void
 stipple_quad(struct quad_stage *qs, struct quad_header *quads[], unsigned nr)
 {
-   static const uint bit31 = 1 << 31;
-   static const uint bit30 = 1 << 30;
+   static const uint bit31 = 1u << 31;
+   static const uint bit30 = 1u << 30;
    unsigned pass = nr;
 
    struct softpipe_context *softpipe = qs->softpipe;
index d73a4b34a5ad2469f31b5def8ce1597b9e5e948e..c89d003c12555e2aded29f7fc011e396b352c211 100644 (file)
@@ -1159,7 +1159,7 @@ st_translate_mesa_program(
 
    /* texture samplers */
    for (i = 0; i < ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxTextureImageUnits; i++) {
-      if (program->SamplersUsed & (1 << i)) {
+      if (program->SamplersUsed & (1u << i)) {
          unsigned target =
             translate_texture_index(program->TexturesUsed[i],
                                     !!(program->ShadowSamplers & (1 << i)));
index 32ada9f7b8a89316f3c23b9251e1411016ce1e01..444e5aac7bdcf22965e6a924dddc40526f8f0c7f 100644 (file)
@@ -1121,7 +1121,7 @@ st_translate_program_common(struct st_context *st,
 
    /* Also add patch inputs. */
    for (attr = 0; attr < 32; attr++) {
-      if (prog->PatchInputsRead & (1 << attr)) {
+      if (prog->PatchInputsRead & (1u << attr)) {
          GLuint slot = num_inputs++;
          GLuint patch_attr = VARYING_SLOT_PATCH0 + attr;
 
@@ -1240,7 +1240,7 @@ st_translate_program_common(struct st_context *st,
 
    /* Also add patch outputs. */
    for (attr = 0; attr < 32; attr++) {
-      if (prog->PatchOutputsWritten & (1 << attr)) {
+      if (prog->PatchOutputsWritten & (1u << attr)) {
          GLuint slot = num_outputs++;
          GLuint patch_attr = VARYING_SLOT_PATCH0 + attr;