Fix cemcom.ansi for 64-bit hosts.
authorGeorge Koehler <xkernigh@netscape.net>
Fri, 7 Sep 2012 19:53:13 +0000 (15:53 -0400)
committerNick Downing <nick@ndcode.org>
Wed, 17 Apr 2019 14:20:38 +0000 (00:20 +1000)
Hosts with sizeof(arith) == sizeof(long) == 8 need to set full_mask[1]
through full_mask[8].  Because MAXSIZE == 8, we only had full_mask[0]
through full_mask[7].  This fix declares arith full_mask[MAXSIZE + 1]
and prevents a fatal error: "array full_mask too small for this machine"

lang/cem/cemcom.ansi/ch3mon.c
lang/cem/cemcom.ansi/ch7mon.c
lang/cem/cemcom.ansi/cstoper.c

index 41b2774..40cc440 100644 (file)
@@ -20,7 +20,7 @@
 #include       "sizes.h"
 
 extern char options[];
-extern arith full_mask[/*MAXSIZE*/];   /* cstoper.c */
+extern arith full_mask[/*MAXSIZE + 1*/];       /* cstoper.c */
 char *symbol2str();
 
 ch3mon(oper, expp)
index ab3e386..f796290 100644 (file)
@@ -18,7 +18,7 @@
 #include       "def.h"
 
 extern char options[];
-extern arith full_mask[/*MAXSIZE*/];   /* cstoper.c */
+extern arith full_mask[/*MAXSIZE + 1*/];       /* cstoper.c */
 char *symbol2str();
 
 ch7mon(oper, expp)
index ddd7bf6..c86f122 100644 (file)
@@ -16,7 +16,8 @@
 #include       "Lpars.h"
 #include       "assert.h"
 
-arith full_mask[MAXSIZE];/* full_mask[1] == 0XFF, full_mask[2] == 0XFFFF, .. */
+/* full_mask[1] == 0XFF, full_mask[2] == 0XFFFF, .. */
+arith full_mask[MAXSIZE + 1];
 #ifndef NOCROSS
 arith max_int;         /* maximum integer on target machine    */
 arith max_unsigned;    /* maximum unsigned on target machine   */
@@ -247,7 +248,7 @@ init_cst()
 
        while (!(bt < 0))       {
                bt = (bt << 8) + 0377, i++;
-               if (i == MAXSIZE)
+               if (i > MAXSIZE)
                        fatal("array full_mask too small for this machine");
                full_mask[i] = bt;
        }