silence warning in Opcode.xs
authorDavid Mitchell <davem@iabyn.com>
Mon, 15 Aug 2016 07:55:06 +0000 (08:55 +0100)
committerDavid Mitchell <davem@iabyn.com>
Mon, 15 Aug 2016 07:55:06 +0000 (08:55 +0100)
Opcode.xs:71:21: warning: overflow in implicit constant conversion [-Woverflow]
     bitmap[len-1] = (PL_maxo & 0x07) ? ~(0xFF << (PL_maxo & 0x07)) : 0xFF;

This was due to to PL_maxo being converted from a var into a const value
in a previous commit.

ext/Opcode/Opcode.pm
ext/Opcode/Opcode.xs

index f492532..912aa4d 100644 (file)
@@ -6,7 +6,7 @@ use strict;
 
 our($VERSION, @ISA, @EXPORT_OK);
 
-$VERSION = "1.36";
+$VERSION = "1.37";
 
 use Carp;
 use Exporter ();
index 936ffba..5c8e22d 100644 (file)
@@ -51,7 +51,7 @@ op_names_init(pTHX)
     int i;
     STRLEN len;
     char **op_names;
-    char *bitmap;
+    U8 *bitmap;
     dMY_CXT;
 
     op_named_bits = newHV();
@@ -65,10 +65,11 @@ op_names_init(pTHX)
     put_op_bitspec(aTHX_ STR_WITH_LEN(":none"), sv_2mortal(new_opset(aTHX_ Nullsv)));
 
     opset_all = new_opset(aTHX_ Nullsv);
-    bitmap = SvPV(opset_all, len);
+    bitmap = (U8*)SvPV(opset_all, len);
     memset(bitmap, 0xFF, len-1); /* deal with last byte specially, see below */
     /* Take care to set the right number of bits in the last byte */
-    bitmap[len-1] = (PL_maxo & 0x07) ? ~(0xFF << (PL_maxo & 0x07)) : 0xFF;
+    bitmap[len-1] = (PL_maxo & 0x07) ? ((~(0xFF << (PL_maxo & 0x07))) & 0xFF)
+                                     : 0xFF;
     put_op_bitspec(aTHX_ STR_WITH_LEN(":all"), opset_all); /* don't mortalise */
 }