fixed type of sizeof (decreases size!)

fixed bug with typedef of function with block scope
This commit is contained in:
eck 1990-11-12 15:28:44 +00:00
parent 96d5009bef
commit 8a00e32bc8
5 changed files with 10 additions and 29 deletions

View file

@ -85,6 +85,8 @@ suppress warning messages.
suppress stricts.
.IP \fB\-a\fR
suppress warnings and stricts.
.IP \fB\-o\fR
suppress warnings and stricts about old-style.
.IP \fB\-\-\fItext\fR
.br
where \fItext\fR can be either of the above or

View file

@ -294,39 +294,17 @@ fill_int_expr(ex, ivalue, fund)
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;

View file

@ -250,7 +250,7 @@ declare_idf(ds, dc, lvl)
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;

View file

@ -1,6 +1,6 @@
cat <<'--EOT--'
/* Generated by make.tokfile */
/* $Header: */
/* $Header$ */
--EOT--
sed '

View file

@ -12,6 +12,7 @@ m generate file.o: file1.h format dependency lines
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