174 lines
2.8 KiB
C
174 lines
2.8 KiB
C
|
/*
|
||
|
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
||
|
*
|
||
|
* This product is part of the Amsterdam Compiler Kit.
|
||
|
*
|
||
|
* Permission to use, sell, duplicate or disclose this software must be
|
||
|
* obtained in writing. Requests for such permissions may be sent to
|
||
|
*
|
||
|
* Dr. Andrew S. Tanenbaum
|
||
|
* Wiskundig Seminarium
|
||
|
* Vrije Universiteit
|
||
|
* Postbox 7161
|
||
|
* 1007 MC Amsterdam
|
||
|
* The Netherlands
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/* Author: E.G. Keizer */
|
||
|
|
||
|
/* This programs is a collection of derived from small tests develloped
|
||
|
for specific bugs/features in the C->EM compiler
|
||
|
*/
|
||
|
|
||
|
char * err_name ;
|
||
|
|
||
|
set_err(s) char *s ; {
|
||
|
printf("%s\n",s) ;
|
||
|
err_name= s ;
|
||
|
}
|
||
|
e(i) {
|
||
|
printf("%s: error %d\n",err_name,i) ;
|
||
|
}
|
||
|
|
||
|
main() {
|
||
|
cmp_rev() ;
|
||
|
loc_dif() ;
|
||
|
con_fold() ;
|
||
|
ass_res() ;
|
||
|
c_to_l() ;
|
||
|
acc_struct() ;
|
||
|
char_param() ;
|
||
|
addr_lb() ;
|
||
|
compl_ind() ;
|
||
|
printf("END\n") ;
|
||
|
}
|
||
|
|
||
|
cmp_rev() {
|
||
|
/* Some compilers magically transform the second < into a > */
|
||
|
int i,j ;
|
||
|
int result ;
|
||
|
|
||
|
set_err("cmp_rev") ;
|
||
|
i=2 ; j=1 ;
|
||
|
result= ( (j-i<0) == (j-i<0) ) ? 1 : 0 ;
|
||
|
if ( !result ) e(1) ;
|
||
|
}
|
||
|
|
||
|
loc_dif() {
|
||
|
set_err("loc_dif") ;
|
||
|
loc_fa(1,2) ;
|
||
|
}
|
||
|
|
||
|
loc_fa(p1,p2) {
|
||
|
int i ;
|
||
|
if ( &p1-&p2 != -1 ) e(1) ;
|
||
|
if ( &i-&p1 >=0 ) e(2) ;
|
||
|
if ( &p1-&i <=0 ) e(3) ;
|
||
|
}
|
||
|
|
||
|
con_fold() {
|
||
|
set_err("con_fold") ;
|
||
|
con_flo( (1 ? 3 : 4.5), 200, 200, 200 ) ;
|
||
|
con_lo( 4L + 3, 1 ) ;
|
||
|
}
|
||
|
con_flo(d) double d ; {
|
||
|
if ( d>3.00001 || d<2.99999 ) e(1) ;
|
||
|
}
|
||
|
con_lo(l) long l ; {
|
||
|
if ( l!=7 ) e(2) ;
|
||
|
}
|
||
|
|
||
|
ass_res() {
|
||
|
char c, *pc ;
|
||
|
int i ;
|
||
|
int s_extend ;
|
||
|
|
||
|
set_err("ass_res") ;
|
||
|
c = -1 ; i=c ;
|
||
|
s_extend= i== -1 ;
|
||
|
|
||
|
pc = &c ;
|
||
|
i = ( *pc++ = 01777 ) ;
|
||
|
switch ( i ) {
|
||
|
case 01777 :
|
||
|
e(1) ; break ;
|
||
|
case -1 :
|
||
|
if ( !s_extend ) e(2) ;
|
||
|
break ;
|
||
|
case 0377 :
|
||
|
if ( s_extend ) e(3) ;
|
||
|
break ;
|
||
|
default :
|
||
|
e(4) ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
c_to_l() {
|
||
|
char c = -1 ;
|
||
|
long l ;
|
||
|
|
||
|
set_err("c_to_l") ;
|
||
|
l= c ;
|
||
|
if ( c==255 ) {
|
||
|
if ( l!=255 ) e(1) ;
|
||
|
} else {
|
||
|
if ( l!= -1 ) e(2) ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
acc_struct() {
|
||
|
struct s1 { char s1_a[3] ; } ss1, is1 ;
|
||
|
struct s2 {
|
||
|
int s2_i ;
|
||
|
struct s1 s2_s1 ;
|
||
|
} ;
|
||
|
struct s3 {
|
||
|
int s3_i ;
|
||
|
struct s2 s3_s2 ;
|
||
|
} ss3, *ps3 ;
|
||
|
|
||
|
set_err("acc_struct") ;
|
||
|
ps3 = &ss3 ;
|
||
|
is1.s1_a[0]=1 ; is1.s1_a[1]=100 ; is1.s1_a[2]=127 ;
|
||
|
ss3.s3_s2.s2_s1= is1 ;
|
||
|
ss1 = ps3->s3_s2.s2_s1 ;
|
||
|
if ( ss1.s1_a[0]!=1 ) e(1) ;
|
||
|
if ( ss1.s1_a[1]!=100 ) e(2) ;
|
||
|
if ( ss1.s1_a[2]!=127 ) e(3) ;
|
||
|
}
|
||
|
|
||
|
char_param() {
|
||
|
set_err("char_param") ;
|
||
|
fcall(1,01002,-1) ;
|
||
|
}
|
||
|
|
||
|
fcall(c1,c2,c3) char c1,c2,c3 ; {
|
||
|
if ( c1!=1 ) e(1) ;
|
||
|
if ( c2!=2 ) e(2) ;
|
||
|
c_alter(&c1,127) ;
|
||
|
if ( c1!=127 ) e(3) ;
|
||
|
c_alter(&c3,0) ;
|
||
|
if ( c3 ) e(4) ;
|
||
|
}
|
||
|
|
||
|
c_alter(ptr,val) char *ptr ; int val ; {
|
||
|
*ptr= val ;
|
||
|
}
|
||
|
|
||
|
addr_lb() {
|
||
|
char a[6] ;
|
||
|
int i ;
|
||
|
|
||
|
set_err("addr_lb");
|
||
|
i=6 ;
|
||
|
if ( &a[6] != a+i ) e(1) ;
|
||
|
}
|
||
|
compl_ind() {
|
||
|
char arr[20] ;
|
||
|
int i ;
|
||
|
set_err("compl_ind") ;
|
||
|
arr[10]=111 ;
|
||
|
i=0 ; if ( arr[i+10] != 111 ) e(1) ;
|
||
|
}
|