gas: microblaze: fix shift overflow
authorMike Frysinger <vapier@gentoo.org>
Sun, 15 Nov 2015 07:46:03 +0000 (02:46 -0500)
committerMike Frysinger <vapier@gentoo.org>
Tue, 17 Nov 2015 04:21:39 +0000 (23:21 -0500)
This code tries to shift an integer 31 bits which triggers a werror:
gas/config/tc-microblaze.c:742:21: error: integer overflow in expression [-Werror=overflow]
  e->X_add_number |= -(1 << 31);

Cast the 1 to offsetT to match X_add_number to fix things.

gas/ChangeLog
gas/config/tc-microblaze.c

index 955fd2ec6431471b404ca317416dd1d9cc317a1a..41e44b5438ee5afb66091aa8ec919bfb185ad117 100644 (file)
@@ -1,3 +1,7 @@
+2015-11-16  Mike Frysinger  <vapier@gentoo.org>
+
+       * config/tc-microblaze.c (parse_imm): Add an offsetT cast.
+
 2015-11-13  Tristan Gingold  <gingold@adacore.com>
 
        * configure: Regenerate.
index ac7c828ccec2c96f9375e90a5c17366eff8dff64..0ec24f8821737e11ad37f27f3cfba97de2911781 100644 (file)
@@ -739,7 +739,7 @@ parse_imm (char * s, expressionS * e, offsetT min, offsetT max)
     {
       /* Special case: sign extend negative 32-bit values to 64-bits.  */
       if ((e->X_add_number >> 31) == 1)
-       e->X_add_number |= -(1 << 31);
+       e->X_add_number |= -((offsetT) 1 << 31);
 
       if (e->X_add_number < min || e->X_add_number > max)
        {