case INT:
ex->ex_type = int_type;
break;
- case INTEGER:
- if (ivalue >= 0 && ivalue <= max_int) {
- ex->ex_type = int_type;
- break;
- }
- /*FALL THROUGH*/
+ case UNSIGNED:
+ ex->ex_type = uint_type;
+ break;
case LONG:
- ex->ex_type =
- (ivalue & (1L << (8*long_size - 1))) ? ulong_type
- : long_type;
+ ex->ex_type = long_type;
break;
case ULONG:
ex->ex_type = ulong_type;
break;
- case UNSIGNED:
- /* We cannot make a test like
- ivalue <= max_unsigned
- because, if
- sizeof(arith) == int_size
- holds, max_unsigned may be a negative arith in
- which case the comparison results in an unexpected
- answer.
- */
- ex->ex_type =
- (ivalue & ~max_int) ?
- ( (ivalue & ~max_unsigned) ?
- ( ivalue & (1L<<(8*long_size-1)) ?
- ulong_type : long_type
- ) : uint_type
- ) : int_type;
- break;
default:
- crash("(intexpr) bad fund %s\n", symbol2str(fund));
+ crash("(fill_int_expr) bad fund %s\n", symbol2str(fund));
/*NOTREACHED*/
}
ex->ex_class = Value;
if (lvl != L_GLOBAL) { /* 3.5.1 */
if (sc == 0)
sc = GLOBAL;
- else if (sc != EXTERN) {
+ else if (sc != EXTERN && sc != TYPEDEF) {
error("illegal storage class %s for function with block-scope"
, symbol2str(sc));
ds->ds_sc = sc = EXTERN;
M set identifier length
n don't generate register messages
L don't generate linenumbers and filename indications
+o no warnings or stricts about normal old-style constuctions
p trace
P in running the preprocessor do not output '# line' lines
R restricted C