corrected the compile-time evaluation of ~<unsigned value>
This commit is contained in:
parent
9dbd1060ad
commit
d7716c5e5a
1 changed files with 8 additions and 2 deletions
|
@ -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))
|
||||||
|
|
Loading…
Reference in a new issue