ubsan: arm: shift exponent 32 is too large for 32-bit type 'unsigned int'
[deliverable/binutils-gdb.git] / opcodes / arm-dis.c
index 12eae61bb5957e67375b52b32d10de927289a08c..d7e21f99e1731314cc91d7c894d7de8a40d9ea91 100644 (file)
@@ -9927,12 +9927,12 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given)
                          unsigned int immed = (given & 0xff);
                          unsigned int a, i;
 
-                         a = (((immed << (32 - rotate))
-                               | (immed >> rotate)) & 0xffffffff);
+                         a = (immed << ((32 - rotate) & 31)
+                              | immed >> rotate) & 0xffffffff;
                          /* If there is another encoding with smaller rotate,
                             the rotate should be specified directly.  */
                          for (i = 0; i < 32; i += 2)
-                           if ((a << i | a >> (32 - i)) <= 0xff)
+                           if ((a << i | a >> ((32 - i) & 31)) <= 0xff)
                              break;
 
                          if (i != rotate)
This page took 0.02441 seconds and 4 git commands to generate.