nir: coverity sign-extension fix
authorRob Clark <robclark@freedesktop.org>
Wed, 18 May 2016 14:17:02 +0000 (10:17 -0400)
committerRob Clark <robclark@freedesktop.org>
Fri, 20 May 2016 15:13:50 +0000 (11:13 -0400)
Not 100% sure, but I think being an unsigned literal will help:

CID 1358505 (#1 of 1): Unintended sign extension
(SIGN_EXTENSION)sign_extension: Suspicious implicit sign extension:
load1->def.num_components with type unsigned char (8 bits, unsigned) is
promoted in load1->def.num_components * (load1->def.bit_size / 8) to
type int (32 bits, signed), then sign-extended to type unsigned long (64
bits, unsigned). If load1->def.num_components * (load1->def.bit_size /
8) is greater than 0x7FFFFFFF, the upper bits of the result will all be
1.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/compiler/nir/nir_instr_set.c

index fe312a048bdb8b6a8d061158d0e77fb6bb0a2e7e..f93ec9ddc09148286d9fcf3838f1a3929e0a417a 100644 (file)
@@ -334,7 +334,7 @@ nir_instrs_equal(const nir_instr *instr1, const nir_instr *instr2)
          return false;
 
       return memcmp(load1->value.f32, load2->value.f32,
-                    load1->def.num_components * (load1->def.bit_size / 8)) == 0;
+                    load1->def.num_components * (load1->def.bit_size / 8u)) == 0;
    }
    case nir_instr_type_phi: {
       nir_phi_instr *phi1 = nir_instr_as_phi(instr1);