fixed type of sizeof (decreases size!)
fixed bug with typedef of function with block scope
This commit is contained in:
		
							parent
							
								
									96d5009bef
								
							
						
					
					
						commit
						8a00e32bc8
					
				
					 5 changed files with 10 additions and 29 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
cat <<'--EOT--'
 | 
			
		||||
/* Generated by make.tokfile */
 | 
			
		||||
/* $Header: */
 | 
			
		||||
/* $Header$ */
 | 
			
		||||
--EOT--
 | 
			
		||||
 | 
			
		||||
sed '
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue