(perl #132870) workaround VC2017 compiler bug
authorTony Cook <tony@develop-help.com>
Tue, 20 Feb 2018 05:18:05 +0000 (16:18 +1100)
committerTony Cook <tony@develop-help.com>
Wed, 7 Mar 2018 04:52:36 +0000 (15:52 +1100)
For non-debug builds MSVC could read small integers like 1 as -255.

It's possible it was confused by the AIX compiler bug workaround.

This change needs no further tests, the integer.t fails without
this workaround.

dist/Storable/Storable.xs

index df0c433..45af7be 100644 (file)
@@ -6106,14 +6106,20 @@ static SV *retrieve_byte(pTHX_ stcxt_t *cxt, const char *cname)
     SV *sv;
     HV *stash;
     int siv;
+#ifndef _MSC_VER
     signed char tmp;   /* Workaround for AIX cc bug --H.Merijn Brand */
+#endif
 
     TRACEME(("retrieve_byte (#%d)", (int)cxt->tagnum));
 
     GETMARK(siv);
     TRACEME(("small integer read as %d", (unsigned char) siv));
+#ifdef _MSC_VER
+    sv = newSViv(siv - 128);
+#else
     tmp = (unsigned char) siv - 128;
     sv = newSViv(tmp);
+#endif
     stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
     SEEN_NN(sv, stash, 0);     /* Associate this new scalar with tag "tagnum" */