Re: ubsan: ns32k: left shift cannot be represented in type
authorAlan Modra <amodra@gmail.com>
Wed, 11 Dec 2019 02:41:07 +0000 (13:11 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 11 Dec 2019 03:03:26 +0000 (13:33 +1030)
* ns32k-dis.c (sign_extend): Correct last patch.

opcodes/ChangeLog
opcodes/ns32k-dis.c

index c1fce7f33cc936763e93f3d648200ae305cd86b5..5345dfb2bf75e74ddb9e039022983643017e32cb 100644 (file)
@@ -1,3 +1,7 @@
+2019-12-11  Alan Modra  <amodra@gmail.com>
+
+       * ns32k-dis.c (sign_extend): Correct last patch.
+
 2019-12-11  Alan Modra  <amodra@gmail.com>
 
        * vax-dis.c (NEXTLONG): Avoid signed overflow.
index 5e6f0964b7aa626796f64dab47cfbdc2483ce48d..e43fff712abc858d9e4da7f5e419882673abd52a 100644 (file)
@@ -327,8 +327,8 @@ bit_copy (bfd_byte *buffer, int offset, int count, char *to)
 static int
 sign_extend (unsigned int value, unsigned int bits)
 {
-  unsigned int sign = 1u << bits;
-  return ((value & (sign - 1)) ^ sign) - sign;
+  unsigned int sign = 1u << (bits - 1);
+  return ((value & (sign + sign - 1)) ^ sign) - sign;
 }
 
 static void