[gnu.gcc.bug] bug report

bbs@RUTGERS.EDU (Barry B. Schwartz) (03/14/89)

I am reporting a possible bug in gcc version 1.34
(and coincidentally version 1.33) for the sun-386i
running SunOS version 4.0.1.

I compiled (but never "installed") gcc 1.34 according to the instructions
in INSTALL, and when I ran the object file comparison test
(both the csh version given and the following bourne shell
version:

for i in *.o
do
	cmp $i stage2/$i
done

) I got many messages to the effect that different stages
of object file were differing in the fifth byte.  I got
a similar result when comparing any two stages of the bootstrap
pairwise, even if I carried out another bootstrap stage.

I tried this with the built-in make, with Gnu make, and with
gnu make and gcc vers. 1.33, and got similar results.  Also
I tried

	gmake bootstrap

(where gmake was the Gnu make) and got similar results.

When I did hex dumps of two of the object files
and compared them, I found differences in bytes 5 and 6 and in
those bytes only.
I found similar results on two different compilations with two
different object code outputs.  I have forgotten what files
were checked in the first pair of hex dumps, but here are the complete
diff outputs from the second pair of hex dumps (od -x):

1c1
< 0000000  014c 0004 fe94 2419 c26a 0000 045e 0000
---
> 0000000  014c 0004 f92e 2419 c26a 0000 045e 0000

The first dump line is for stage 3 of expr.o  (./expr.o), whereas
the second dump line is for stage 2 of expr.o  (./stage2/expr.o).

I tried 
   config.gcc sun386
and
   config.gcc sun386i
(which did the same thing, apparently).
Either way I got similar results.

I never noticed any error messages or warnings during any
of the compilations.

Apparently bison was never invoked.

I was using the standard sun linker (as far as I know).
I changed the makefile definitions of bindir and libdir
to /home/public/bin and /home/public/lib, respectively.
Also, when I used gnu make, i called it gmake and put
the following line in the makefile:

	MAKE = gmake

------------------

If the problem is a bug, I hope I have been helpful.
If it isn't, then I say "Woops!" and do the compilation
correctly when I find out how.  I am curious just how
harmful this problem could be.

Thank you for everything.

Barry Schwartz
cdspr!bbs@rutgers.edu

wdp@ZEUS.CRAY.COM (Walter Poxon) (09/30/89)

========================================================================

We are using GCC 1.36 on Sun-3/50s under SunOS 3.5.  Our compiler is
configured thusly:

    aux-output.c:   symbolic link to ./config/out-m68k.c
    config.h:       symbolic link to ./config/xm-m68k.h
    md:             symbolic link to ./config/m68k.md
    tm.h:           symbolic link to ./config/tm-sun3os3nf.h

While compiling the following source code, with no command-line
parameters to gcc other than "-c", we get the error
    gcc: Program cc1 got fatal signal 6.

The preprocessed source file follows my .signature.
It is some rot generated by a 4GL prepreocessor.

--
Walter Poxon			Domain:  wdp@cray.com
Cray Research			Old style:  wdp%cray.com@uc.msc.umn.edu
1440 Northland Dr.		UUCP:  uunet!cray!wdp
Mendota Hts, MN  55120  USA	Telephone:  +1 612 681 3126

========================================================================

extern	struct	_iobuf {
	int	_cnt;
	unsigned char *_ptr;
	unsigned char *_base;
	int	_bufsiz;
	short	_flag;
	char	_file;		 
} _iob[];
extern struct _iobuf 	*fopen();
extern struct _iobuf 	*fdopen();
extern struct _iobuf 	*freopen();
extern struct _iobuf 	*popen();
extern struct _iobuf 	*tmpfile();
extern long	ftell();
extern char	*fgets();
extern char	*gets();
extern char	*ctermid();
extern char	*cuserid();
extern char	*tempnam();
extern char	*tmpnam();
extern char
	*strcpy(),
	*strncpy(),
	*strcat(),
	*strncat(),
	*strchr(),
	*strrchr(),
	*strpbrk(),
	*strtok();
extern int
	strcmp(),
	strncmp(),
	strlen(),
	strspn(),
	strcspn();
typedef struct tir_list {
	char tir[10];
	char from[30];
	char to[30];
	char severity[15];
	char status[15];
	char open_date[15];
	char change_date[15];
	char product[20];
	char opsys[20];
	char machine[15];
	char prj[15];
	char spr[10];
	char des[10];
	char info[10];
	char res[10];
	char found[20];
	char fixed[20];
	struct tir_list *next;
	struct tir_list *prev;
} tirlist_t;
extern int errno;
struct   sqlca
         {
           char    sqlcaid[8];
           long    sqlabc;
           long    sqlcode;
         struct
           {
             unsigned short sqlerrml;
             char           sqlerrmc[70];
           } sqlerrm;
           char    sqlerrp[8];
           long    sqlerrd[6];
           char    sqlwarn[8];
           char    sqlext[8];
         };
         struct sqlca sqlca
         ;
static struct {
unsigned int    sq001N;
unsigned char  *sq001V[4];
unsigned int    sq001L[4];
unsigned short  sq001T[4];
unsigned short *sq001I[4];
} sq001 = {4};
static struct {
unsigned int    sq002N;
unsigned char  *sq002V[1];
unsigned int    sq002L[1];
unsigned short  sq002T[1];
unsigned short *sq002I[1];
} sq002 = {1};
static struct {
unsigned int    sq003N;
unsigned char  *sq003V[1];
unsigned int    sq003L[1];
unsigned short  sq003T[1];
unsigned short *sq003I[1];
} sq003 = {1};
static struct {
unsigned int    sq004N;
unsigned char  *sq004V[1];
unsigned int    sq004L[1];
unsigned short  sq004T[1];
unsigned short *sq004I[1];
} sq004 = {1};
static char sq005[404] =
"UPDATE OIR SET CHANGE_DATE=SYSDATE,STATUS=:b1:i1,SERIAL_NUM=:b2:i2,REPORT_BY=:b3:i3,ASSIGN_TO=:b4:i4,CAUSE=:b5:i5,OS_NAME=:b6:i6,OS_VERS=:b7:i7,CORE=:b8:i8,VENDOR=:b9:i9,DEVICE=:b10:i10,TIM_OF_CALL=TO_DATE(:b11:i11,'MM/DD/YY HH24:MI:SS'),TIM_OF_ACK=TO_DA




TE(:b12:i12,'MM/DD/YY HH24:MI:SS'),TIM_ON_SITE=TO_DATE(:b13:i13,'MM/DD/YY HH24:MI:SS'),DESCRIPTION=:b14:i14,RESOLUTION=:b15:i15 WHERE OIR_NUMBER=:b16"
;
static struct {
unsigned int    sq006N;
unsigned char  *sq006V[16];
unsigned int    sq006L[16];
unsigned short  sq006T[16];
unsigned short *sq006I[16];
} sq006 = {16};
static struct {
unsigned int    sq007N;
unsigned char  *sq007V[1];
unsigned int    sq007L[1];
unsigned short  sq007T[1];
unsigned short *sq007I[1];
} sq007 = {1};
static struct {
unsigned int    sq008N;
unsigned char  *sq008V[1];
unsigned int    sq008L[1];
unsigned short  sq008T[1];
unsigned short *sq008I[1];
} sq008 = {1};
static char sq009[31] =
"SELECT MAX(OIR_NUMBER)FROM OIR"
;
static struct {
unsigned int    sq010N;
unsigned char  *sq010V[1];
unsigned int    sq010L[1];
unsigned short  sq010T[1];
unsigned short *sq010I[1];
} sq010 = {1};
static struct {
unsigned int    sq011N;
unsigned char  *sq011V[1];
unsigned int    sq011L[1];
unsigned short  sq011T[1];
unsigned short *sq011I[1];
} sq011 = {1};
static char sq012[77] =
"INSERT INTO OIR(OIR_NUMBER,OPEN_DATE,CHANGE_DATE)VALUES(:b1,SYSDATE,SYSDATE)"
;
static struct {
unsigned int    sq013N;
unsigned char  *sq013V[1];
unsigned int    sq013L[1];
unsigned short  sq013T[1];
unsigned short *sq013I[1];
} sq013 = {1};
static struct {
unsigned int    sq014N;
unsigned char  *sq014V[1];
unsigned int    sq014L[1];
unsigned short  sq014T[1];
unsigned short *sq014I[1];
} sq014 = {1};
static struct {
unsigned int    sq015N;
unsigned char  *sq015V[1];
unsigned int    sq015L[1];
unsigned short  sq015T[1];
unsigned short *sq015I[1];
} sq015 = {1};
static char sq016[37] =
"DELETE FROM OIR WHERE OIR_NUMBER=:b1"
;
static struct {
unsigned int    sq017N;
unsigned char  *sq017V[1];
unsigned int    sq017L[1];
unsigned short  sq017T[1];
unsigned short *sq017I[1];
} sq017 = {1};
static struct {
unsigned int    sq018N;
unsigned char  *sq018V[1];
unsigned int    sq018L[1];
unsigned short  sq018T[1];
unsigned short *sq018I[1];
} sq018 = {1};
static int SQLTM[8];
static int sqlcun[4] = {
0,0,0,0};
static int sqlusi[1] = {
0};
static unsigned int sqlami = 0;
static int SQLBT0 = 1;
static int SQLBT1 = 2;
static int SQLBT2 = 4;
static int SQLBT3 = 9;
static unsigned int sqlvsn = 10110;
extern    sqlab2();
extern    sqlad2();
extern    sqlbs2();
extern    sqlcom();
extern    sqlexe();
extern    sqlfch();
extern    sqllo2();
extern    sqlopn();
extern    sqlosq();
extern    sqlrol();
extern    sqlsca();
extern    sqlscc();
extern    sqlsch();
extern    sqltfl();
extern    sqlwnr();
int
oconnect()
{
struct {
  unsigned short len;
  unsigned char arr[20];
  } login;
struct {
  unsigned short len;
  unsigned char arr[20];
  } pw;
  char *oracle_error();
  void rollback();
  setenv("TWO_TASK", "t:codd");
  strcpy((login.arr) ,  "oir" );
  strcpy((pw.arr) ,    "oir" );
  (login.len = strlen(login.arr)) ;
  (pw.len = strlen(pw.arr)) ;
sqlsca(&sqlca);
sq001.sq001V[0] = (unsigned char *)&login.len;
sq001.sq001L[0] = (unsigned int)22;
sq001.sq001T[0] = (unsigned short)9;
sq001.sq001I[0] = (unsigned short *)0;
sq001.sq001V[1] = (unsigned char *)&pw.len;
sq001.sq001L[1] = (unsigned int)22;
sq001.sq001T[1] = (unsigned short)9;
sq001.sq001I[1] = (unsigned short *)0;
sq001.sq001T[2] = (unsigned short)10;
sq001.sq001T[3] = (unsigned short)10;
SQLTM[0] = (int)0;
SQLTM[1] = (int)10;
sqllo2(
  &sq001.sq001N,sq001.sq001V,sq001.sq001L,sq001.sq001T,
  &sqlami, &SQLTM[0], &SQLTM[1], &sqlvsn);
if (sqlca.sqlcode < 0)  goto o_error;
  return 0;
o_error:
  oracle_error();
  rollback();
  sqlca.sqlcode = 0;
  return 1;
}
char *
  oracle_error()
{
  static char errorm[256];
  sprintf(errorm, "%s (%d)", sqlca.sqlerrm.sqlerrmc, -sqlca.sqlcode);
  fprintf((&_iob[2]) ,"%s\n",errorm);
  return errorm;
}
extern int errno;
hangup()
{
sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq002.sq002T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq002.sq002N, sq002.sq002V,
  sq002.sq002L, sq002.sq002T, sq002.sq002I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
SQLTM[0] = (int)1;
sqlcom(&SQLTM[0]);
  sqlca.sqlcode = 0;
  return 0;
}
void rollback()
{
sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq003.sq003T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq003.sq003N, sq003.sq003V,
  sq003.sq003L, sq003.sq003T, sq003.sq003I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
SQLTM[0] = (int)0;
sqlrol(&SQLTM[0]);
}
char *
  update_oir(oir,stat,sn,report,assign,caus,name,vers,corefile,
             vend,dev,call,ack,site,des,res)
char *oir,*stat,*sn,*report,*assign,*caus,*name,*vers,*corefile,
  *vend,*dev,*call,*ack,*site,*des,*res;
{
struct {
  unsigned short len;
  unsigned char arr[10];
  } oir_number;
struct {
  unsigned short len;
  unsigned char arr[10];
  } status;
struct {
  unsigned short len;
  unsigned char arr[10];
  } serial_num;
struct {
  unsigned short len;
  unsigned char arr[30];
  } report_by;
struct {
  unsigned short len;
  unsigned char arr[30];
  } assign_to;
struct {
  unsigned short len;
  unsigned char arr[15];
  } cause;
struct {
  unsigned short len;
  unsigned char arr[15];
  } os_name;
struct {
  unsigned short len;
  unsigned char arr[15];
  } os_vers;
struct {
  unsigned short len;
  unsigned char arr[80];
  } core;
struct {
  unsigned short len;
  unsigned char arr[30];
  } vendor;
struct {
  unsigned short len;
  unsigned char arr[30];
  } device;
struct {
  unsigned short len;
  unsigned char arr[20];
  } tim_of_call;
struct {
  unsigned short len;
  unsigned char arr[20];
  } tim_of_ack;
struct {
  unsigned short len;
  unsigned char arr[20];
  } tim_on_site;
struct {
  unsigned short len;
  unsigned char arr[240];
  } description;
struct {
  unsigned short len;
  unsigned char arr[240];
  } resolution;
  short oir_numberi, statusi, serial_numi,
    report_byi, assign_toi, causei, os_namei, os_versi,
    corei, vendori, devicei, tim_of_calli, tim_of_acki,
    tim_on_sitei, descriptioni, resolutioni;
  static char *value;
  char *oracle_error();
  oir_numberi=statusi=serial_numi=report_byi=assign_toi=causei=os_namei=
    os_versi=corei=vendori=devicei=tim_of_calli=tim_of_acki=tim_on_sitei=
    descriptioni=resolutioni=0;
  strcpy((oir_number.arr) , oir);
  if (!(oir_number.len = strlen(oir_number.arr)) )
    return value = "update_oir: halted: null oir number";
  strcpy((status.arr) , stat);
  if (!(status.len = strlen(status.arr)) )
    statusi = -1;
  strcpy((serial_num.arr) , sn);
  if (!(serial_num.len = strlen(serial_num.arr)) )
    serial_numi = -1;
  strcpy((report_by.arr) , report);
  if (!(report_by.len = strlen(report_by.arr)) )
    report_byi = -1;
  strcpy((assign_to.arr) , assign);
  if (!(assign_to.len = strlen(assign_to.arr)) )
    assign_toi = -1;
  strcpy((cause.arr) , caus);
  if (!(cause.len = strlen(cause.arr)) )
    causei = -1;
  strcpy((os_name.arr) , name);
  if (!(os_name.len = strlen(os_name.arr)) )
    os_namei = -1;
  strcpy((os_vers.arr) , vers);
  if (!(os_vers.len = strlen(os_vers.arr)) )
    os_versi = -1;
  strcpy((core.arr) , corefile);
  if (!(core.len = strlen(core.arr)) )
    corei = -1;
  strcpy((vendor.arr) , vend);
  if (!(vendor.len = strlen(vendor.arr)) )
    vendori = -1;
  strcpy((device.arr) , dev);
  if (!(device.len = strlen(device.arr)) )
    devicei = -1;
  strcpy((tim_of_call.arr) , call);
  if (!(tim_of_call.len = strlen(tim_of_call.arr)) )
    tim_of_calli = -1;
  strcpy((tim_of_ack.arr) , ack);
  if (!(tim_of_ack.len = strlen(tim_of_ack.arr)) )
    tim_of_acki = -1;
  strcpy((tim_on_site.arr) , site);
  if (!(tim_on_site.len = strlen(tim_on_site.arr)) )
    tim_on_sitei = -1;
  printf("Call: %s  Ack: %s  Site: %s\n",call,ack,site);
  strncpy((description.arr) , des, 240);  
  (description.arr) [239] = '\0';
  if (!(description.len = strlen(description.arr)) )
    descriptioni = -1;
  strncpy((resolution.arr) , res, 240);
  (resolution.arr) [239] = '\0';
  if (!(resolution.len = strlen(resolution.arr)) )
    resolutioni = -1;
sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq004.sq004T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq004.sq004N, sq004.sq004V,
  sq004.sq004L, sq004.sq004T, sq004.sq004I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
sqlscc(&sqlcun[0]);
sqltfl(&SQLTM[0], &SQLBT0);
if ( !SQLTM[0] )
  {   
SQLTM[0] = (int)16384;
sqlopn(&SQLTM[0], &SQLBT3, &sqlvsn);
SQLTM[0] = (int)403;
sqlosq(sq005, &SQLTM[0]);
sq006.sq006V[0] = (unsigned char *)&status.len;
sq006.sq006L[0] = (unsigned int)12;
sq006.sq006T[0] = (unsigned short)9;
sq006.sq006I[0] = (unsigned short *)&statusi;
sq006.sq006V[1] = (unsigned char *)&serial_num.len;
sq006.sq006L[1] = (unsigned int)12;
sq006.sq006T[1] = (unsigned short)9;
sq006.sq006I[1] = (unsigned short *)&serial_numi;
sq006.sq006V[2] = (unsigned char *)&report_by.len;
sq006.sq006L[2] = (unsigned int)32;
sq006.sq006T[2] = (unsigned short)9;
sq006.sq006I[2] = (unsigned short *)&report_byi;
sq006.sq006V[3] = (unsigned char *)&assign_to.len;
sq006.sq006L[3] = (unsigned int)32;
sq006.sq006T[3] = (unsigned short)9;
sq006.sq006I[3] = (unsigned short *)&assign_toi;
sq006.sq006V[4] = (unsigned char *)&cause.len;
sq006.sq006L[4] = (unsigned int)17;
sq006.sq006T[4] = (unsigned short)9;
sq006.sq006I[4] = (unsigned short *)&causei;
sq006.sq006V[5] = (unsigned char *)&os_name.len;
sq006.sq006L[5] = (unsigned int)17;
sq006.sq006T[5] = (unsigned short)9;
sq006.sq006I[5] = (unsigned short *)&os_namei;
sq006.sq006V[6] = (unsigned char *)&os_vers.len;
sq006.sq006L[6] = (unsigned int)17;
sq006.sq006T[6] = (unsigned short)9;
sq006.sq006I[6] = (unsigned short *)&os_versi;
sq006.sq006V[7] = (unsigned char *)&core.len;
sq006.sq006L[7] = (unsigned int)82;
sq006.sq006T[7] = (unsigned short)9;
sq006.sq006I[7] = (unsigned short *)&corei;
sq006.sq006V[8] = (unsigned char *)&vendor.len;
sq006.sq006L[8] = (unsigned int)32;
sq006.sq006T[8] = (unsigned short)9;
sq006.sq006I[8] = (unsigned short *)&vendori;
sq006.sq006V[9] = (unsigned char *)&device.len;
sq006.sq006L[9] = (unsigned int)32;
sq006.sq006T[9] = (unsigned short)9;
sq006.sq006I[9] = (unsigned short *)&devicei;
sq006.sq006V[10] = (unsigned char *)&tim_of_call.len;
sq006.sq006L[10] = (unsigned int)22;
sq006.sq006T[10] = (unsigned short)9;
sq006.sq006I[10] = (unsigned short *)&tim_of_calli;
sq006.sq006V[11] = (unsigned char *)&tim_of_ack.len;
sq006.sq006L[11] = (unsigned int)22;
sq006.sq006T[11] = (unsigned short)9;
sq006.sq006I[11] = (unsigned short *)&tim_of_acki;
sq006.sq006V[12] = (unsigned char *)&tim_on_site.len;
sq006.sq006L[12] = (unsigned int)22;
sq006.sq006T[12] = (unsigned short)9;
sq006.sq006I[12] = (unsigned short *)&tim_on_sitei;
sq006.sq006V[13] = (unsigned char *)&description.len;
sq006.sq006L[13] = (unsigned int)242;
sq006.sq006T[13] = (unsigned short)9;
sq006.sq006I[13] = (unsigned short *)&descriptioni;
sq006.sq006V[14] = (unsigned char *)&resolution.len;
sq006.sq006L[14] = (unsigned int)242;
sq006.sq006T[14] = (unsigned short)9;
sq006.sq006I[14] = (unsigned short *)&resolutioni;
sq006.sq006V[15] = (unsigned char *)&oir_number.len;
sq006.sq006L[15] = (unsigned int)12;
sq006.sq006T[15] = (unsigned short)9;
sq006.sq006I[15] = (unsigned short *)0;
sqlab2(&sq006.sq006N, sq006.sq006V,
  sq006.sq006L, sq006.sq006T, sq006.sq006I);
  }   
SQLTM[0] = (int)1;
sqlexe(&SQLTM[0]);
sqlwnr();
if (sqlca.sqlcode < 0)  goto o_err;
sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq007.sq007T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq007.sq007N, sq007.sq007V,
  sq007.sq007L, sq007.sq007T, sq007.sq007I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
SQLTM[0] = (int)0;
sqlcom(&SQLTM[0]);
if (sqlca.sqlcode < 0)  goto o_err;
  return (char *) 0;
o_err:
  rollback();
  return value = oracle_error();
}
char *
new_oir()
{
  int oir_number;
  static char oir_str[10];
  char *oracle_error();
sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq008.sq008T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq008.sq008N, sq008.sq008V,
  sq008.sq008L, sq008.sq008T, sq008.sq008I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
sqlscc(&sqlcun[1]);
sqltfl(&SQLTM[0], &SQLBT0);
if ( !SQLTM[0] )
  {   
SQLTM[0] = (int)16384;
sqlopn(&SQLTM[0], &SQLBT3, &sqlvsn);
SQLTM[0] = (int)30;
sqlosq(sq009, &SQLTM[0]);
sq010.sq010V[0] = (unsigned char *)&oir_number;
sq010.sq010L[0] = (unsigned int)4;
sq010.sq010T[0] = (unsigned short)3;
sq010.sq010I[0] = (unsigned short *)0;
sqlad2(&sq010.sq010N, sq010.sq010V,
  sq010.sq010L, sq010.sq010T, sq010.sq010I);
  }   
SQLTM[0] = (int)1;
sqlexe(&SQLTM[0]);
SQLTM[0] = (int)1;
SQLTM[1] = (int)0;
sqlfch(&SQLTM[0], &SQLTM[1]);
if (sqlca.sqlcode < 0)  goto o_error;
  printf("current max oir # == %d.\n",oir_number);
  ++oir_number;
  printf("We'll insert oir# == %d.\n",oir_number);
sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq011.sq011T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq011.sq011N, sq011.sq011V,
  sq011.sq011L, sq011.sq011T, sq011.sq011I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
sqlscc(&sqlcun[2]);
sqltfl(&SQLTM[0], &SQLBT0);
if ( !SQLTM[0] )
  {   
SQLTM[0] = (int)16384;
sqlopn(&SQLTM[0], &SQLBT3, &sqlvsn);
SQLTM[0] = (int)76;
sqlosq(sq012, &SQLTM[0]);
sq013.sq013V[0] = (unsigned char *)&oir_number;
sq013.sq013L[0] = (unsigned int)4;
sq013.sq013T[0] = (unsigned short)3;
sq013.sq013I[0] = (unsigned short *)0;
sqlab2(&sq013.sq013N, sq013.sq013V,
  sq013.sq013L, sq013.sq013T, sq013.sq013I);
  }   
SQLTM[0] = (int)1;
sqlexe(&SQLTM[0]);
if (sqlca.sqlcode < 0)  goto o_error;
sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq014.sq014T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq014.sq014N, sq014.sq014V,
  sq014.sq014L, sq014.sq014T, sq014.sq014I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
SQLTM[0] = (int)0;
sqlcom(&SQLTM[0]);
if (sqlca.sqlcode < 0)  goto o_error;
  sprintf(oir_str, "%d", oir_number);
  return oir_str;
o_error:
  oracle_error();
  rollback();
  return (char *)0;
}
char *
  delete_oir(oir)
     char *oir;
{
  static char errmsg[256];
struct {
  unsigned short len;
  unsigned char arr[10];
  } oir_number;
  char *oracle_error();
  strcpy((oir_number.arr) ,oir);
  if (!(oir_number.len = strlen(oir_number.arr)) )
    { strcpy(errmsg,"NULL oir id"); return errmsg; }
sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq015.sq015T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq015.sq015N, sq015.sq015V,
  sq015.sq015L, sq015.sq015T, sq015.sq015I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
sqlscc(&sqlcun[3]);
sqltfl(&SQLTM[0], &SQLBT0);
if ( !SQLTM[0] )
  {   
SQLTM[0] = (int)16384;
sqlopn(&SQLTM[0], &SQLBT3, &sqlvsn);
SQLTM[0] = (int)36;
sqlosq(sq016, &SQLTM[0]);
sq017.sq017V[0] = (unsigned char *)&oir_number.len;
sq017.sq017L[0] = (unsigned int)12;
sq017.sq017T[0] = (unsigned short)9;
sq017.sq017I[0] = (unsigned short *)0;
sqlab2(&sq017.sq017N, sq017.sq017V,
  sq017.sq017L, sq017.sq017T, sq017.sq017I);
  }   
SQLTM[0] = (int)1;
sqlexe(&SQLTM[0]);
sqlwnr();
if (sqlca.sqlcode < 0)  goto o_error;
sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq018.sq018T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq018.sq018N, sq018.sq018V,
  sq018.sq018L, sq018.sq018T, sq018.sq018I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
SQLTM[0] = (int)0;
sqlcom(&SQLTM[0]);
if (sqlca.sqlcode < 0)  goto o_error;
  return (char *)0;
o_error:
  strcpy(errmsg,oracle_error());
  rollback();
  return errmsg;
}

wdp@ZEUS.CRAY.COM (Walter Poxon) (10/09/89)

   ========================================================================
   We are using GCC 1.36 on Sun-3/50s under SunOS 3.5.  Our compiler is
   configured thusly:
       aux-output.c:   symbolic link to ./config/out-m68k.c
       config.h:       symbolic link to ./config/xm-m68k.h
       md:             symbolic link to ./config/m68k.md
       tm.h:           symbolic link to ./config/tm-sun3os3nf.h

   While compiling the following source code, with no command-line
   parameters to gcc other than "-c", we get the error
       gcc: Program cc1 got fatal signal 6.

   I reported this bug last week and you sent me a patch to stor-layout.c
   (a new build_int()) which I have installed, yet the problem persists.

   The replacement of build_int() is the only mod we have made to 1.36

   The preprocessed source file follows my .signature. It is output from an
   SQL preprocessor.

   --
   Walter Poxon			Domain:  wdp@cray.com
   Cray Research		Old style:  wdp%cray.com@uc.msc.umn.edu
   1440 Northland Dr.		UUCP:  uunet!cray!wdp
   Mendota Hts, MN  55120  USA	Telephone:  +1 612 681 3126

   ========================================================================

# 1 "libts-ANSI.c"
# 1 "/usr/include/stdio.h" 1

extern	struct	_iobuf {
	int	_cnt;
	unsigned char *_ptr;
	unsigned char *_base;
	int	_bufsiz;
	short	_flag;
	char	_file;		 
} _iob[];

extern struct _iobuf 	*fopen();
extern struct _iobuf 	*fdopen();
extern struct _iobuf 	*freopen();
extern struct _iobuf 	*popen();
extern struct _iobuf 	*tmpfile();
extern long	ftell();
extern char	*fgets();
extern char	*gets();

extern char	*ctermid();
extern char	*cuserid();
extern char	*tempnam();
extern char	*tmpnam();

# 3 "libts-ANSI.c" 2

# 1 "/usr/include/sys/errno.h" 1

# 4 "libts-ANSI.c" 2

# 1 "/usr/include/string.h" 1
 
extern char
	*strcpy(),
	*strncpy(),
	*strcat(),
	*strncat(),
	*strchr(),
	*strrchr(),
	*strpbrk(),
	*strtok();
extern int
	strcmp(),
	strncmp(),
	strlen(),
	strspn(),
	strcspn();
# 5 "libts-ANSI.c" 2

# 1 "libts.h" 1

typedef struct ts {
	char tes_name[21];
	char tes_title[241];
	char ent_code[10];
	char sui_code[10];
	char author[30];
	char copilot[30];
	char expert[30];
	char des_code[20];
	char lan_code[10];
	char tes_case_total[10];
	char tes_source[81];
	char tes_binary[81];
	char pro_first[30];
	char pro_last[30];
	char tes_archive[16];
	char tes_cpu_type[11];
	char tes_real_time[21];
} test_source_table_entry;

# 6 "libts-ANSI.c" 2

extern int errno;

struct   sqlca
         {
           char    sqlcaid[8];
           long    sqlabc;
           long    sqlcode;
         struct
           {
             unsigned short sqlerrml;
             char           sqlerrmc[70];
           } sqlerrm;
           char    sqlerrp[8];
           long    sqlerrd[6];
           char    sqlwarn[8];
           char    sqlext[8];
         };

         struct sqlca sqlca

# 93 "libts-ANSI.c"

         ;

static struct {
unsigned int    sq001N;
unsigned char  *sq001V[1];
unsigned int    sq001L[1];
unsigned short  sq001T[1];
unsigned short *sq001I[1];
} sq001 = {1};
static char sq002[52] =
"SELECT TES_NAME FROM TEST_SOURCE WHERE TES_NAME=:b1"
;
static struct {
unsigned int    sq003N;
unsigned char  *sq003V[1];
unsigned int    sq003L[1];
unsigned short  sq003T[1];
unsigned short *sq003I[1];
} sq003 = {1};
static struct {
unsigned int    sq004N;
unsigned char  *sq004V[1];
unsigned int    sq004L[1];
unsigned short  sq004T[1];
unsigned short *sq004I[1];
} sq004 = {1};
static struct {
unsigned int    sq005N;
unsigned char  *sq005V[1];
unsigned int    sq005L[1];
unsigned short  sq005T[1];
unsigned short *sq005I[1];
} sq005 = {1};
static char sq006[35] =
"INSERT INTO TES_SOURCE VALUES(:b1)"
;
static struct {
unsigned int    sq007N;
unsigned char  *sq007V[1];
unsigned int    sq007L[1];
unsigned short  sq007T[1];
unsigned short *sq007I[1];
} sq007 = {1};
static struct {
unsigned int    sq008N;
unsigned char  *sq008V[1];
unsigned int    sq008L[1];
unsigned short  sq008T[1];
unsigned short *sq008I[1];
} sq008 = {1};
static char sq009[320] =
"UPDATE TEST_SOURCE SET TES_TITLE=:b1,ENT_CODE=:b2,SUI_CODE=:b3,EMP_ID_AUTHOR=:b4,EMP_ID_COPILOT=:b5,EMP_ID_EXPERT=:b6,DES_CODE=:b7,LAN_CODE=:b8,TES_CASE_TOTAL=:b9,TES_SOURCE=:b10,TES_BINARY=:b11,PRO_ID_FIRST=:b12:i12,PRO_ID_LAST=:b13:i13,TES_ARCHIVE=:b14

:i14,TES_CPU_TYPE=:b15:i15,TES_REAL_TIME=:b16 WHERE TES_NAME=:b17"

;
static struct {
unsigned int    sq010N;
unsigned char  *sq010V[17];
unsigned int    sq010L[17];
unsigned short  sq010T[17];
unsigned short *sq010I[17];
} sq010 = {17};
static struct {
unsigned int    sq011N;
unsigned char  *sq011V[1];
unsigned int    sq011L[1];
unsigned short  sq011T[1];
unsigned short *sq011I[1];
} sq011 = {1};
static struct {
unsigned int    sq012N;
unsigned char  *sq012V[1];
unsigned int    sq012L[1];
unsigned short  sq012T[1];
unsigned short *sq012I[1];
} sq012 = {1};
static char sq013[684] =
"SELECT TES_TITLE,ENT_CODE,SUI_CODE,AUTHOR.EMP_FIRST_NAME,AUTHOR.EMP_LAST_NAME,COPILOT.EMP_FIRST_NAME,COPILOT.EMP_LAST_NAME,EXPERT.EMP_FIRST_NAME,EXPERT.EMP_LAST_NAME,DES_CODE,LAN_CODE,TES_CASE_TOTAL,TES_SOURCE,TES_BINARY,LAST.PRO_NAME,LAST.PRO_RELEASE,LA

ST.PRO_BUGFIX,FIRST.PRO_NAME,FIRST.PRO_RELEASE,FIRST.PRO_BUGFIX,TES_ARCHIVE,TES_CPU_TYPE,TES_REAL_TIME)FROM TEST_SOURCE,EMPLOYEE AUTHOR,EMPLOYEE COPILOT,EMPLOYEE EXPERT,PRODUCT FIRST,PRODUCT LAST WHERE TES_NAME=:b1 AND AUTHOR.EMP_ID=TEST_SOURCE.EMP_ID_AUT

HOR AND COPILOT.EMP_ID=TEST_SOURCE.EMP_ID_COPILOT AND EXPERT.EMP_ID=TEST_SOURCE.EMP_ID_EXPER AND FIRST.PRO_ID=TEST_SOURCE.PRO_ID_FIRST AND LAST.PRO_ID=TEST_SOURCE.PRO_ID_LAST"
# 191 "libts-ANSI.c"
;
static struct {
unsigned int    sq014N;
unsigned char  *sq014V[1];
unsigned int    sq014L[1];
unsigned short  sq014T[1];
unsigned short *sq014I[1];
} sq014 = {1};
static struct {
unsigned int    sq015N;
unsigned char  *sq015V[23];
unsigned int    sq015L[23];
unsigned short  sq015T[23];
unsigned short *sq015I[23];
} sq015 = {23};
static int SQLTM[8];
static int sqlcun[4] = {
0,0,0,0};
static int sqlusi[1] = {
0};
static int SQLBT0 = 1;
static int SQLBT1 = 2;
static int SQLBT2 = 4;
static int SQLBT3 = 9;
static unsigned int sqlvsn = 10110;
extern    sqlab2();
extern    sqlad2();
extern    sqlbs2();
extern    sqlcom();
extern    sqlexe();
extern    sqlfch();
extern    sqlopn();
extern    sqlosq();
extern    sqlsca();
extern    sqlscc();
extern    sqlsch();
extern    sqltfl();
extern    sqlwnr();
typedef struct {
  unsigned short len;
  unsigned char *arr;
} oracle_varchar;

char *
  insert_into_test_source(struct ts *ts)
{

struct {
  unsigned short len;
  unsigned char arr[0];
  } tes_name;

struct {
  unsigned short len;
  unsigned char arr[0];
  } duplicate;

  static char errmsg[80];
  static char *value, *update_test_source(struct ts *), *o_error(void);

sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq001.sq001T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq001.sq001N, sq001.sq001V,
  sq001.sq001L, sq001.sq001T, sq001.sq001I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
sqlscc(&sqlcun[0]);
sqltfl(&SQLTM[0], &SQLBT0);
if ( !SQLTM[0] )
  {   
SQLTM[0] = (int)16384;
sqlopn(&SQLTM[0], &SQLBT3, &sqlvsn);
SQLTM[0] = (int)51;
sqlosq(sq002, &SQLTM[0]);
sq003.sq003V[0] = (unsigned char *)&tes_name.len;
sq003.sq003L[0] = (unsigned int)strlen(tes_name);
sq003.sq003T[0] = (unsigned short)9;
sq003.sq003I[0] = (unsigned short *)0;
sqlab2(&sq003.sq003N, sq003.sq003V,
  sq003.sq003L, sq003.sq003T, sq003.sq003I);
sq004.sq004V[0] = (unsigned char *)&duplicate.len;
sq004.sq004L[0] = (unsigned int)strlen(duplicate);
sq004.sq004T[0] = (unsigned short)9;
sq004.sq004I[0] = (unsigned short *)0;
sqlad2(&sq004.sq004N, sq004.sq004V,
  sq004.sq004L, sq004.sq004T, sq004.sq004I);
  }   
SQLTM[0] = (int)1;
sqlexe(&SQLTM[0]);
SQLTM[0] = (int)1;
SQLTM[1] = (int)0;
sqlfch(&SQLTM[0], &SQLTM[1]);
if (sqlca.sqlcode == 1403)  goto okay;
if (sqlca.sqlcode < 0)  goto o_err;

  strcpy(errmsg,
    "insert_ts halted: a record for %s already exists in ut.test_source\n",
     ts->tes_name);

  return errmsg;

 okay:

sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq005.sq005T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq005.sq005N, sq005.sq005V,
  sq005.sq005L, sq005.sq005T, sq005.sq005I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
sqlscc(&sqlcun[1]);
sqltfl(&SQLTM[0], &SQLBT0);
if ( !SQLTM[0] )
  {   
SQLTM[0] = (int)16384;
sqlopn(&SQLTM[0], &SQLBT3, &sqlvsn);
SQLTM[0] = (int)34;
sqlosq(sq006, &SQLTM[0]);
sq007.sq007V[0] = (unsigned char *)&tes_name.len;
sq007.sq007L[0] = (unsigned int)strlen(tes_name);
sq007.sq007T[0] = (unsigned short)9;
sq007.sq007I[0] = (unsigned short *)0;
sqlab2(&sq007.sq007N, sq007.sq007V,
  sq007.sq007L, sq007.sq007T, sq007.sq007I);
  }   
SQLTM[0] = (int)1;
sqlexe(&SQLTM[0]);
if (sqlca.sqlcode < 0)  goto o_err;

  if (value = update_test_source(ts))
    return value;

 o_err:
  rollback();
  return value = o_error();
}

char *
  update_test_source(struct ts *ts)

{

struct {
  unsigned short len;
  unsigned char arr[21];
  } tes_name;


struct {
  unsigned short len;
  unsigned char arr[241];
  } tes_title;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } ent_code;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } sui_code;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } emp_id_author;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } emp_id_copilot;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } emp_id_expert;
 


struct {
  unsigned short len;
  unsigned char arr[20];
  } des_code;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } lan_code;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } tes_case_total;
 


struct {
  unsigned short len;
  unsigned char arr[81];
  } tes_source;
 


struct {
  unsigned short len;
  unsigned char arr[81];
  } tes_binary;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } pro_id_first;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } pro_id_last;
 


struct {
  unsigned short len;
  unsigned char arr[16];
  } tes_archive;
 


struct {
  unsigned short len;
  unsigned char arr[11];
  } tes_cpu_type;
 


struct {
  unsigned short len;
  unsigned char arr[21];
  } tes_real_time;

  short pro_id_firsti;
  short pro_id_lasti;
  short tes_archivei;
  short tes_cpu_typei;

 



  static char *err, errmsg[80];
  char *oracle_error(void), *loadOracleVar();
  char *getempid(char *), *getproid(char *);
  char *check_sui_code(char *), *check_ent_code(char *);
  char *check_des_code(char *), *check_lan_code(char *);
  char *tmp;

  pro_id_firsti = pro_id_lasti = tes_archivei = tes_cpu_typei = 0;

   

  if (err=loadOracleVar("tes_name",&tes_name,ts->tes_name,(int *)0))
    return err;

  if (err=loadOracleVar("tes_title",&tes_title,ts->tes_title,(int *)0))
    return err;

  if (check_ent_code(ts->ent_code) == 0 ) {
    sprintf(errmsg, "update_ts halted: %s is an invalid entity code\n",
            ts->ent_code);
    return errmsg;
  }
  if (err=loadOracleVar("ent_code",&ent_code,ts->ent_code,(int *)0))
    return err;

  
  if (check_sui_code(ts->sui_code) == 0 ) {
    sprintf(errmsg, "update_ts halted: %s is an invalid suite code\n",
            ts->sui_code);
    return errmsg;
  }
  if (err=loadOracleVar("sui_code",&sui_code,ts->sui_code,(int *)0))
    return err;

  if ((tmp = getempid(ts->author)) == 0 ) {
    sprintf(errmsg,"update_ts halted: %s is not a valid author",ts->author);
    return errmsg;
  } else
    if (err=loadOracleVar("emp_id_author",&emp_id_author,tmp,(int *)0))
      return err;

  if ((tmp = getempid(ts->copilot)) == 0 ) {
    sprintf(errmsg,"update_ts halted: %s is not a valid copilot",ts->copilot);
    return errmsg;
  } else
    if (err=loadOracleVar("emp_id_copilot",&emp_id_copilot,tmp,(int *)0))
      return err;

  if ((tmp = getempid(ts->expert)) == 0 ) {
    sprintf(errmsg,"update_ts halted: %s is not a valid expert",ts->expert);
    return errmsg;
  } else
    if (err=loadOracleVar("emp_id_expert",&emp_id_expert,tmp,(int *)0))
      return err;

  if (check_des_code(ts->des_code) == 0 ) {
    sprintf(errmsg,"update_ts halted: %s is not a valid des_code\n",
            ts->des_code);
    return errmsg;
  }
  if (err=loadOracleVar("des_code",&des_code,ts->des_code,(int *)0))
    return err;

  if (check_lan_code(ts->lan_code) == 0 ) {
    sprintf(errmsg,"update_ts halted: %s is not a valid lan_code\n",
            ts->lan_code);
    return errmsg;
  }
  if (err=loadOracleVar("lan_code",&lan_code,ts->lan_code,(int *)0))
    return err;

  if (err=loadOracleVar("tes_case_total",&tes_case_total,ts->tes_case_total,
                        (int *)0))
    return err;

  if (err=loadOracleVar("tes_source",&tes_source,ts->tes_source,(int *)0))
    return err;

  if (err=loadOracleVar("tes_binary",&tes_binary,ts->tes_binary,(int *)0))
    return err;

  if ((tmp = getproid(ts->pro_first)) == 0 ) {
    sprintf(errmsg,"update_ts halted: %s isn't a valid product",ts->pro_first);
    return errmsg;
  } else
    if (err=loadOracleVar("pro_id_first",&pro_id_first,tmp,&pro_id_firsti))
      return err;
    
  if ((tmp = getproid(ts->pro_last)) == 0 ) {
    sprintf(errmsg,"update_ts halted: %s isn't a valid product",ts->pro_last);
    return errmsg;
  } else
    if (err=loadOracleVar("pro_id_last",&pro_id_last,tmp,&pro_id_lasti))
      return err;
  
  if (err=loadOracleVar("tes_archive",&tes_archive,ts->tes_archive,
                        &tes_archivei))
    return err;

  if (err=loadOracleVar("tes_cpu_type",&tes_cpu_type,ts->tes_cpu_type,
                        (int *)0))
    return err;

  if (err=loadOracleVar("tes_real_time",&tes_real_time,ts->tes_real_time,
                        (int *)0))
    return err;

 



 



 



















sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq008.sq008T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq008.sq008N, sq008.sq008V,
  sq008.sq008L, sq008.sq008T, sq008.sq008I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
sqlscc(&sqlcun[2]);
sqltfl(&SQLTM[0], &SQLBT0);
if ( !SQLTM[0] )
  {   
SQLTM[0] = (int)16384;
sqlopn(&SQLTM[0], &SQLBT3, &sqlvsn);
SQLTM[0] = (int)319;
sqlosq(sq009, &SQLTM[0]);
sq010.sq010V[0] = (unsigned char *)&tes_title.len;
sq010.sq010L[0] = (unsigned int)243;
sq010.sq010T[0] = (unsigned short)9;
sq010.sq010I[0] = (unsigned short *)0;
sq010.sq010V[1] = (unsigned char *)&ent_code.len;
sq010.sq010L[1] = (unsigned int)12;
sq010.sq010T[1] = (unsigned short)9;
sq010.sq010I[1] = (unsigned short *)0;
sq010.sq010V[2] = (unsigned char *)&sui_code.len;
sq010.sq010L[2] = (unsigned int)12;
sq010.sq010T[2] = (unsigned short)9;
sq010.sq010I[2] = (unsigned short *)0;
sq010.sq010V[3] = (unsigned char *)&emp_id_author.len;
sq010.sq010L[3] = (unsigned int)12;
sq010.sq010T[3] = (unsigned short)9;
sq010.sq010I[3] = (unsigned short *)0;
sq010.sq010V[4] = (unsigned char *)&emp_id_copilot.len;
sq010.sq010L[4] = (unsigned int)12;
sq010.sq010T[4] = (unsigned short)9;
sq010.sq010I[4] = (unsigned short *)0;
sq010.sq010V[5] = (unsigned char *)&emp_id_expert.len;
sq010.sq010L[5] = (unsigned int)12;
sq010.sq010T[5] = (unsigned short)9;
sq010.sq010I[5] = (unsigned short *)0;
sq010.sq010V[6] = (unsigned char *)&des_code.len;
sq010.sq010L[6] = (unsigned int)22;
sq010.sq010T[6] = (unsigned short)9;
sq010.sq010I[6] = (unsigned short *)0;
sq010.sq010V[7] = (unsigned char *)&lan_code.len;
sq010.sq010L[7] = (unsigned int)12;
sq010.sq010T[7] = (unsigned short)9;
sq010.sq010I[7] = (unsigned short *)0;
sq010.sq010V[8] = (unsigned char *)&tes_case_total.len;
sq010.sq010L[8] = (unsigned int)12;
sq010.sq010T[8] = (unsigned short)9;
sq010.sq010I[8] = (unsigned short *)0;
sq010.sq010V[9] = (unsigned char *)&tes_source.len;
sq010.sq010L[9] = (unsigned int)83;
sq010.sq010T[9] = (unsigned short)9;
sq010.sq010I[9] = (unsigned short *)0;
sq010.sq010V[10] = (unsigned char *)&tes_binary.len;
sq010.sq010L[10] = (unsigned int)83;
sq010.sq010T[10] = (unsigned short)9;
sq010.sq010I[10] = (unsigned short *)0;
sq010.sq010V[11] = (unsigned char *)&pro_id_first.len;
sq010.sq010L[11] = (unsigned int)12;
sq010.sq010T[11] = (unsigned short)9;
sq010.sq010I[11] = (unsigned short *)&pro_id_firsti;
sq010.sq010V[12] = (unsigned char *)&pro_id_last.len;
sq010.sq010L[12] = (unsigned int)12;
sq010.sq010T[12] = (unsigned short)9;
sq010.sq010I[12] = (unsigned short *)&pro_id_lasti;
sq010.sq010V[13] = (unsigned char *)&tes_archive.len;
sq010.sq010L[13] = (unsigned int)18;
sq010.sq010T[13] = (unsigned short)9;
sq010.sq010I[13] = (unsigned short *)&tes_archivei;
sq010.sq010V[14] = (unsigned char *)&tes_cpu_type.len;
sq010.sq010L[14] = (unsigned int)13;
sq010.sq010T[14] = (unsigned short)9;
sq010.sq010I[14] = (unsigned short *)&tes_cpu_typei;
sq010.sq010V[15] = (unsigned char *)&tes_real_time.len;
sq010.sq010L[15] = (unsigned int)23;
sq010.sq010T[15] = (unsigned short)9;
sq010.sq010I[15] = (unsigned short *)0;
sq010.sq010V[16] = (unsigned char *)&tes_name.len;
sq010.sq010L[16] = (unsigned int)23;
sq010.sq010T[16] = (unsigned short)9;
sq010.sq010I[16] = (unsigned short *)0;
sqlab2(&sq010.sq010N, sq010.sq010V,
  sq010.sq010L, sq010.sq010T, sq010.sq010I);
  }   
SQLTM[0] = (int)1;
sqlexe(&SQLTM[0]);
sqlwnr();
if (sqlca.sqlcode == 1403)  goto o_err;
if (sqlca.sqlcode < 0)  goto o_err;

 


sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq011.sq011T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq011.sq011N, sq011.sq011V,
  sq011.sq011L, sq011.sq011T, sq011.sq011I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
SQLTM[0] = (int)0;
sqlcom(&SQLTM[0]);
if (sqlca.sqlcode < 0)  goto o_err;

  return (char *) 0;
  
o_err:
  rollback();
  return err = oracle_error();
}

char *
  loadOracleVars(char *col_nam, oracle_varchar *v, char *s, int *i)
{
  static char errmsg[80];

  strcpy(v->arr,s);
    
  if ((v->len = strlen(v->arr)) == 0)
    if (!i) {            
      sprintf(errmsg,"update_ts halted: null %s\n", col_nam);
      return errmsg;
    } else               
     *i = -1;
  
  return (char *)0;
}


 
 













struct ts *
  select_from_test_source(char *tes_name)
{
 



struct {
  unsigned short len;
  unsigned char arr[21];
  } tes_name;
 


struct {
  unsigned short len;
  unsigned char arr[241];
  } tes_title;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } ent_code;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } sui_code;
struct {
  unsigned short len;
  unsigned char arr[20];
  } author_first;
 


struct {
  unsigned short len;
  unsigned char arr[20];
  } author_last;
struct {
  unsigned short len;
  unsigned char arr[20];
  } copilot_first;
 


struct {
  unsigned short len;
  unsigned char arr[20];
  } copilot_last;
struct {
  unsigned short len;
  unsigned char arr[20];
  } expert_first;
 


struct {
  unsigned short len;
  unsigned char arr[20];
  } expert_last;
 


struct {
  unsigned short len;
  unsigned char arr[20];
  } des_code;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } lan_code;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } tes_case_total;
 


struct {
  unsigned short len;
  unsigned char arr[81];
  } tes_source;
 


struct {
  unsigned short len;
  unsigned char arr[81];
  } tes_binary;
struct {
  unsigned short len;
  unsigned char arr[20];
  } first_pro_name;
struct {
  unsigned short len;
  unsigned char arr[10];
  } first_pro_release;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } first_pro_bugfix;
struct {
  unsigned short len;
  unsigned char arr[20];
  } last_pro_name;
struct {
  unsigned short len;
  unsigned char arr[10];
  } last_pro_release;
 


struct {
  unsigned short len;
  unsigned char arr[10];
  } last_pro_bugfix;
struct {
  unsigned short len;
  unsigned char arr[16];
  } tes_archive;
 


short tes_archivei;
struct {
  unsigned short len;
  unsigned char arr[11];
  } tes_cpu_type;
 


short tes_cpu_typei;
 


struct {
  unsigned short len;
  unsigned char arr[21];
  } tes_real_time;
  short pro_id_firsti;
  short pro_id_lasti;

 



  static char *err, errmsg[80];
  char *oracle_error();

 




  
 




























sqlsca(&sqlca);
if ( !sqlusi[0] )
  {   
sq012.sq012T[0] = (unsigned short)10;
SQLTM[0] = (int)4;
sqlbs2(&sq012.sq012N, sq012.sq012V,
  sq012.sq012L, sq012.sq012T, sq012.sq012I,
  &SQLTM[0], &sqlusi[0]);
  }   
sqlsch(&sqlusi[0]);
sqlscc(&sqlcun[3]);
sqltfl(&SQLTM[0], &SQLBT0);
if ( !SQLTM[0] )
  {   
SQLTM[0] = (int)16384;
sqlopn(&SQLTM[0], &SQLBT3, &sqlvsn);
SQLTM[0] = (int)683;
sqlosq(sq013, &SQLTM[0]);
sq014.sq014V[0] = (unsigned char *)&tes_name.len;
sq014.sq014L[0] = (unsigned int)23;
sq014.sq014T[0] = (unsigned short)9;
sq014.sq014I[0] = (unsigned short *)0;
sqlab2(&sq014.sq014N, sq014.sq014V,
  sq014.sq014L, sq014.sq014T, sq014.sq014I);
sq015.sq015V[0] = (unsigned char *)&tes_title.len;
sq015.sq015L[0] = (unsigned int)243;
sq015.sq015T[0] = (unsigned short)9;
sq015.sq015I[0] = (unsigned short *)0;
sq015.sq015V[1] = (unsigned char *)&ent_code.len;
sq015.sq015L[1] = (unsigned int)12;
sq015.sq015T[1] = (unsigned short)9;
sq015.sq015I[1] = (unsigned short *)0;
sq015.sq015V[2] = (unsigned char *)&sui_code.len;
sq015.sq015L[2] = (unsigned int)12;
sq015.sq015T[2] = (unsigned short)9;
sq015.sq015I[2] = (unsigned short *)0;
sq015.sq015V[3] = (unsigned char *)&author_first.len;
sq015.sq015L[3] = (unsigned int)22;
sq015.sq015T[3] = (unsigned short)9;
sq015.sq015I[3] = (unsigned short *)0;
sq015.sq015V[4] = (unsigned char *)&author_last.len;
sq015.sq015L[4] = (unsigned int)22;
sq015.sq015T[4] = (unsigned short)9;
sq015.sq015I[4] = (unsigned short *)0;
sq015.sq015V[5] = (unsigned char *)&copilot_first.len;
sq015.sq015L[5] = (unsigned int)22;
sq015.sq015T[5] = (unsigned short)9;
sq015.sq015I[5] = (unsigned short *)0;
sq015.sq015V[6] = (unsigned char *)&copilot_last.len;
sq015.sq015L[6] = (unsigned int)22;
sq015.sq015T[6] = (unsigned short)9;
sq015.sq015I[6] = (unsigned short *)0;
sq015.sq015V[7] = (unsigned char *)&expert_first.len;
sq015.sq015L[7] = (unsigned int)22;
sq015.sq015T[7] = (unsigned short)9;
sq015.sq015I[7] = (unsigned short *)0;
sq015.sq015V[8] = (unsigned char *)&expert_last.len;
sq015.sq015L[8] = (unsigned int)22;
sq015.sq015T[8] = (unsigned short)9;
sq015.sq015I[8] = (unsigned short *)0;
sq015.sq015V[9] = (unsigned char *)&des_code.len;
sq015.sq015L[9] = (unsigned int)22;
sq015.sq015T[9] = (unsigned short)9;
sq015.sq015I[9] = (unsigned short *)0;
sq015.sq015V[10] = (unsigned char *)&lan_code.len;
sq015.sq015L[10] = (unsigned int)12;
sq015.sq015T[10] = (unsigned short)9;
sq015.sq015I[10] = (unsigned short *)0;
sq015.sq015V[11] = (unsigned char *)&tes_case_total.len;
sq015.sq015L[11] = (unsigned int)12;
sq015.sq015T[11] = (unsigned short)9;
sq015.sq015I[11] = (unsigned short *)0;
sq015.sq015V[12] = (unsigned char *)&tes_source.len;
sq015.sq015L[12] = (unsigned int)83;
sq015.sq015T[12] = (unsigned short)9;
sq015.sq015I[12] = (unsigned short *)0;
sq015.sq015V[13] = (unsigned char *)&tes_binary.len;
sq015.sq015L[13] = (unsigned int)83;
sq015.sq015T[13] = (unsigned short)9;
sq015.sq015I[13] = (unsigned short *)0;
sq015.sq015V[14] = (unsigned char *)&first_pro_name.len;
sq015.sq015L[14] = (unsigned int)22;
sq015.sq015T[14] = (unsigned short)9;
sq015.sq015I[14] = (unsigned short *)0;
sq015.sq015V[15] = (unsigned char *)&first_pro_release.len;
sq015.sq015L[15] = (unsigned int)12;
sq015.sq015T[15] = (unsigned short)9;
sq015.sq015I[15] = (unsigned short *)0;
sq015.sq015V[16] = (unsigned char *)&first_pro_bugfix.len;
sq015.sq015L[16] = (unsigned int)12;
sq015.sq015T[16] = (unsigned short)9;
sq015.sq015I[16] = (unsigned short *)0;
sq015.sq015V[17] = (unsigned char *)&last_pro_name.len;
sq015.sq015L[17] = (unsigned int)22;
sq015.sq015T[17] = (unsigned short)9;
sq015.sq015I[17] = (unsigned short *)0;
sq015.sq015V[18] = (unsigned char *)&last_pro_release.len;
sq015.sq015L[18] = (unsigned int)12;
sq015.sq015T[18] = (unsigned short)9;
sq015.sq015I[18] = (unsigned short *)0;
sq015.sq015V[19] = (unsigned char *)&last_pro_bugfix.len;
sq015.sq015L[19] = (unsigned int)12;
sq015.sq015T[19] = (unsigned short)9;
sq015.sq015I[19] = (unsigned short *)0;
sq015.sq015V[20] = (unsigned char *)&tes_archive.len;
sq015.sq015L[20] = (unsigned int)18;
sq015.sq015T[20] = (unsigned short)9;
sq015.sq015I[20] = (unsigned short *)0;
sq015.sq015V[21] = (unsigned char *)&tes_cpu_type.len;
sq015.sq015L[21] = (unsigned int)13;
sq015.sq015T[21] = (unsigned short)9;
sq015.sq015I[21] = (unsigned short *)0;
sq015.sq015V[22] = (unsigned char *)&tes_real_time.len;
sq015.sq015L[22] = (unsigned int)23;
sq015.sq015T[22] = (unsigned short)9;
sq015.sq015I[22] = (unsigned short *)0;
sqlad2(&sq015.sq015N, sq015.sq015V,
  sq015.sq015L, sq015.sq015T, sq015.sq015I);
  }   
SQLTM[0] = (int)1;
sqlexe(&SQLTM[0]);
SQLTM[0] = (int)1;
SQLTM[1] = (int)0;
sqlfch(&SQLTM[0], &SQLTM[1]);
if (sqlca.sqlcode == 1403)  goto no_ts;
if (sqlca.sqlcode < 0)  goto o_error;

}

rohit@MIPS.COM (Rohit Chandra) (01/18/90)

(sorry if you get this twice - mailer problems.)

I am trying to compile g++ using gcc on a MIPS M-2000 running RISC/OS 4.0,
(with one change in va-mips.h)
when the compiler crashes with the message: Program cc1 got fatal signal 4,
while trying to compile the file expr.c

Details follow:

Version: gcc version 1.36

Input file: expr.c from gcc version 1.36.1- (based on GCC 1.36)
    with the include files in that version of g++. 
    (with one change in va-mips.h, described below).

Options:
            -c
            -DGATHER_STATISTICS
            -Wunused
            -DUSE_COLLECT
            -DEXTENDED_COFF
            -DFASCIST_ASSEMBLER
            -I.
            -I./config

tm.h = tm-mips-bsd.h
md   = mips.md
[I have made some changes in the machine description files.
 I *believe* these should not affect the bug, and hope you can still 
 reproduce it.]

Machine = mips m2000-8, Running RISC/OS 4.0

Error: The compiler dies with the following message-
>    gcc: Program cc1 got fatal signal 4.
>    *** Error code 1
>
>    Stop.



    
To Reproduce the bug: 
---------------------

I am CHANGING the definitions in va-mips.h, included through
gvarargs.h in the input file expr.c.
Specifically, I am changing 

(a) typedef struct 
    { int pnt;                 
      char *stack;
      double *fpregs;
       } va_list  ;


to: 
(b) typdef char *va_list; 

Compilation goes through fine for definition (a) - the original one -
and the bug appears for definition (b) of va_list.

[I also make the corresponding changes in the related macros 
 va_alist, va_dcl, va_start, va_arg, va_end,
 but they do not affect the bug since the bug remains even if I remove
 all uses of these macros from the input file expr.c ]


Therefore, to reproduce the bug, all you should need to do is:
change the typedef of va_list in va-mips.h 
to typedef char* va_list;

and perhaps comment out the *statements* (not the declarations) within
emit_library_call in expr.c since they use the macros va_start,
va_arg, va_end and therefore depend on the typedef of va_list. 

Description of the bug:
-----------------------
The error occurs while parsing the declaration     
    CUMULATIVE_ARGS args_so_far;
in the function expand_call in the file expr.c.

CUMULATIVE_ARGS args_so_far is defined to be 
#define CUMULATIVE_ARGS struct    { \
                           enum arg_state arg_rec_state;\
                           int restype,arg_num;\
                        }


The stack at that point (while debugging cc1) is:
(dbx) run expr.cpp
 init_comparisons init_expr enqueue_insn protect_from_queue queued_subexp_p 
emit_queue init_queue convert_move convert_to_mode integer_mode_p
move_by_pieces move_by_pieces_ninsns move_by_pieces_1 emit_block_move
move_block_to_reg move_block_from_reg use_regs clear_storage
emit_move_insn push_block gen_push_operand emit_push_insn
emit_library_call expand_assignment store_expr store_constructor
store_field force_operand save_noncopied_parts init_noncopied_parts
validate_subtarget expand_expr 
expr.c: In function expand_expr:
expr.c:3014: warning:assignment of pointer from integer lacks a cast
expr.c:3024: warning:assignment of pointer from integer lacks a cast
 expand_builtin expand_increment preexpand_calls prepare_call_address
emit_call_1 init_pending_stack_adjust clear_pending_stack_adjust
do_pending_stack_adjust expand_cleanups_to expand_call
Illegal instruction [abort.abort:22 ,0x4ac920]
         Source not available
(dbx) where
>  0 abort.abort(0x100243c8, 0x10024458, 0x7fff9c98, 0x7fff999c, 0x42e550) ["ab
ort.s":22, 0x4ac920]
   1 .block44 ["expr.c":3122, 0x4308bc]
   2 expand_expr(exp = 0x10024900, target = 0x10024ec8, tmode = VOIDmode, modif
ier = EXPAND_NORMAL) ["expr.c":3122, 0x4308bc]
   3 store_expr(exp = 0x10024900, target = 0x10024ec8, suggest_reg = 0) ["expr.
c":1823, 0x42d07c]
   4 .block26 ["expr.c":2268, 0x42e24c]
   5 expand_expr(exp = 0x10024ea8, target = (nil), tmode = VOIDmode, modifier =
EXPAND_NORMAL) ["expr.c":2268, 0x42e24c]
   6 variable_size(0x7fff9c9a, 0x0, 0x40b064, 0x1001e510, 0xffffff8c) ["stor-la
yout.c":161, 0x42031c]
   7 layout_type(0x40bad4, 0x0, 0x10024ea8, 0x0, 0x74) ["stor-layout.c":929, 0x
4222bc]
   8 finish_struct(0x10024d50, 0x10123a88, 0x10020828, 0x0, 0x0) ["c-decl.c":32
05, 0x40c17c]
   9 yyparse(0x10008f74, 0x2000, 0xa, 0x0, 0x2) ["c-parse.tab.c":773, 0x401864]
  10 compile_file(0x0, 0x0, 0x0, 0x0, 0x0) ["toplev.c":1113, 0x41708c]
  11 main(0x7fff9f74, 0x7fff9f80, 0x0, 0x0, 0x0) ["toplev.c":1981, 0x418dcc]
(dbx)


It is somehow related to the declarations
    register va_list p;
    ...
    CUMULATIVE_ARGS args_so_far;
in the function emit_library_call, the only function to use varargs in
the entire file. (emit_library_call occurs before the function
expand_call in expr.c). 

If I move the declaration of CUMULATIVE_ARGS within emit_library_call from: 
    register va_list p;
    ...
    CUMULATIVE_ARGS args_so_far;

to: 
    CUMULATIVE_ARGS args_so_far;
    register va_list p;
    ... (same declarations in the original order)

then the error goes away.



Although this message is long, I wonder if I have described the bug
well. I will be happy to answer any more questions that you have. You
can reach me at:

rohit@mips.com, or rohit@cs.stanford.edu
408-991-6545 (work)