corrected the compile-time evaluation of ~<unsigned value>

This commit is contained in:
erikb 1986-09-09 09:47:43 +00:00
parent 9dbd1060ad
commit d7716c5e5a

View file

@ -13,6 +13,7 @@
#include "def.h" #include "def.h"
extern char options[]; extern char options[];
extern long full_mask[/*MAXSIZE*/]; /* cstoper.c */
char *symbol2str(); char *symbol2str();
ch7mon(oper, expp) ch7mon(oper, expp)
@ -99,13 +100,18 @@ ch7mon(oper, expp)
erroneous2int(expp); erroneous2int(expp);
break; break;
} }
/* FALL THROUGH */ /* FALLTHROUGH */
} }
case '-': case '-':
any2arith(expp, oper); any2arith(expp, oper);
if (is_cp_cst(*expp)) { if (is_cp_cst(*expp)) {
arith o1 = (*expp)->VL_VALUE; arith o1 = (*expp)->VL_VALUE;
(*expp)->VL_VALUE = (oper == '-') ? -o1 : ~o1;
(*expp)->VL_VALUE = (oper == '-') ? -o1 :
((*expp)->ex_type->tp_unsigned ?
(~o1) & full_mask[(*expp)->ex_type->tp_size] :
~o1
);
} }
else else
if (is_fp_cst(*expp)) if (is_fp_cst(*expp))