Thread View: gnu.gcc.bug
2 messages
2 total messages
Started by Tom Quinn
Mon, 26 Sep 1988 15:33
bug in sparc gcc 1.28
Author: Tom Quinn
Date: Mon, 26 Sep 1988 15:33
Date: Mon, 26 Sep 1988 15:33
263 lines
7153 bytes
7153 bytes
The following code will cause gcc to get a fatal signal when compile
with "-O". This is gcc version 1.28 on a Sun4/110 running SunOs 4.0.
Tom Quinn Canadian Institute for Theoretical Astrophysics
trq@moose.cita.toronto.edu
SOON TO BE trq@moose.cita.utoronto.ca
UUCP - decvax!utgpu!moose!trq
BITNET - quinn@utorphys.bitnet
ARPA - trq%moose.cita.toronto.edu@relay.cs.net
The compile:
gcc -g -v -O -sun4 -c control.c
gcc version 1.28
/usr/local/lib/gcc-cpp -v -undef -D__GNU__ -D__GNUC__ -Dsparc -Dsun -Dunix -D__OPTIMIZE__ control.c /tmp/cca04551.cpp
GNU CPP version 1.28
/usr/local/lib/gcc-cc1 /tmp/cca04551.cpp -quiet -dumpbase control.c -g -O -version -o /tmp/cca04551.s
GNU C version 1.28 (sparc) compiled by GNU C version 1.28.
gcc: Program cc1 got fatal signal 6.
The code:
------------------------------------------------------------------------
void push(), push_dstack() ;
typedef struct {
int nitem;
char **i_list;
} TOK_LIST;
typedef union yystype {
char charval[80 ];
float floatval;
TOK_LIST *t_list;
};
extern union yystype yylval;
typedef struct {
char d_name[40];
int (*dev_setup)(),
(*dev_enable)(),
(*dev_idle)(),
(*dev_close)() ;
} DEVICES;
extern DEVICES devices[];
extern int devnum,
ndev;
char *malloc(),
*sprintf(),
*strncat();
static char buff[2000 + 1],
word[80 ];
char *mgets();
static int graph_mode = 0 ;
typedef
struct yyltype
{
int last_column;
char *text;
}
yyltype;
static char yytranslate[] = { 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 6
};
static short yyr1[] = { 0,
112, 112, 113, 113, 113, 113, 113, 113, 113, 113
};
static short yyr2[] = { 0,
1, 1, 0, 1
};
static short yydefact[] = { 1,
43, 142, 0, 0
};
static short yydefgoto[] = { 1,
74
};
static short yypact[] = {-32768,
-32768,-32768, 456,-32768
};
static short yypgoto[] = {-32768,
198
};
static short yytable[] = { 92,
0, 0, 0, 249
};
static short yycheck[] = { 26,
-1, -1, -1, 109
};
int yychar;
union yystype yylval;
yyltype yylloc;
int
yyparse()
{
register int yystate;
register int yyn;
register short *yyssp;
register union yystype *yyvsp;
yyltype *yylsp;
int yyerrstatus;
int yychar1;
short yyssa[200 ];
union yystype yyvsa[200 ];
yyltype yylsa[200 ];
short *yyss = yyssa;
union yystype *yyvs = yyvsa;
yyltype *yyls = yylsa;
union yystype yyval;
int yylen;
yystate = 0;
yyerrstatus = 0;
yychar = -2 ;
yyssp = yyss - 1;
yyvsp = yyvs;
yylsp = yyls;
yynewstate:
*++yyssp = yystate;
yyn = yypact[yystate];
if (yyn == -32768 )
goto yydefault;
if (yychar == -2 )
{
yychar = yylex() ;
}
if (yychar <= 0)
{
yychar1 = 0;
yychar = 0 ;
}
else
{
yychar1 = ((unsigned)(yychar) <= 346 ? yytranslate[yychar] : 134) ;
}
yyn += yychar1;
if (yyn < 0 || yyn > 1184 || yycheck[yyn] != yychar1)
goto yydefault;
yyn = yytable[yyn];
if (yyn == 454 )
return(0) ;
if (yychar != 0 )
yychar = -2 ;
*++yyvsp = yylval;
*++yylsp = yylloc;
if (yyerrstatus) yyerrstatus--;
yystate = yyn;
goto yynewstate;
yydefault:
yyn = yydefact[yystate];
if (yyn == 0)
goto yyerrlab;
yylen = yyr2[yyn];
yyval = yyvsp[1-yylen];
switch (yyn) {
case 30:
{
int i;
if(graph_mode) (*devices[devnum].dev_idle) ();
(*devices[devnum].dev_close) ();
(void)sprintf(buff,"%s",yyvsp[0].charval);
(void)mgets(word,80 );
(void)strncat(buff,word,2000 );
for(i = 0;i < ndev;i++) {
if(strcmp(devices[i].d_name,yyvsp[0].charval) == 0) {
devnum = i;
break;
}
}
if(i < ndev) {
if( (*devices[devnum].dev_setup) (word) < 0) {
msg_1s("No such device %s\n",buff);
devnum = 0 ;
}
} else {
devnum = 1 ;
if( (*devices[devnum].dev_setup) (buff) != 0) {
msg_1s("No such device %s\n",buff);
devnum = 0 ;
}
}
set_dev();
(*devices[devnum].dev_enable) (); graph_mode = 1;
;
break;}
case 31:
{
char *do_loop;
register int i,j,k;
if(yyvsp[-8].charval[0] == '\0' || yyvsp[-1].t_list == 0 ) {
freelist(yyvsp[-1].t_list);
break;
}
if(yyvsp[-1].t_list->nitem <= 0) {
msg_1s("DO %s command list is empty\n",yyvsp[-8].charval);
freelist(yyvsp[-1].t_list);
break;
}
if((do_loop = malloc(2000 + 1)) == 0 ) {
msg_1s("Can't allocate space for DO %s\n",yyvsp[-8].charval);
freelist(yyvsp[-1].t_list);
break;
}
j = 0;
for(i = 0;i < yyvsp[-1].t_list->nitem;i++) {
for(k = 0;k < 80 && j < 2000 ;j++,k++) {
if((do_loop[j] = yyvsp[-1].t_list->i_list[i][k]) == '\0') {
do_loop[j++] = ' ';
break;
}
}
}
if(j == 2000 ) {
msg_1d("Maximum length of a DO loop is %d\n",2000 );
}
do_loop[j-1] = '\n'; do_loop[j] = '\0';
push_dstack(yyvsp[-8].charval,yyvsp[-6].floatval,yyvsp[-4].floatval,yyvsp[-3].floatval);
if(next_do() == 0) {
push(do_loop,1 );
}
freelist(yyvsp[-1].t_list);
;
break;}
}
yyvsp -= yylen;
yylsp -= yylen;
yyssp -= yylen;
*++yyvsp = yyval;
yylsp++;
yyn = yyr1[yyn];
yystate = yypgoto[yyn - 112 ] + *yyssp;
if (yystate >= 0 && yystate <= 1184 && yycheck[yystate] == *yyssp)
yystate = yytable[yystate];
else
yystate = yydefgoto[yyn - 112 ];
goto yynewstate;
yyerrlab:
if (! yyerrstatus)
{
yyerror("parse error");
}
if (yyerrstatus == 3)
{
if (yychar == 0 )
return(1) ;
yychar = -2 ;
}
yyerrstatus = 3;
goto yyerrhandle;
yyerrdefault:
if (yyssp == yyss) return(1) ;
yyvsp--;
yylsp--;
yystate = *--yyssp;
yyerrhandle:
yyn = yypact[yystate];
if (yyn == -32768 )
goto yyerrdefault;
yyn += 1 ;
if (yyn < 0 || yyn > 1184 || yycheck[yyn] != 1 )
goto yyerrdefault;
yyn = yytable[yyn];
if (yyn == 454 )
return(0) ;
*++yyvsp = yylval;
*++yylsp = yylloc;
yystate = yyn;
goto yynewstate;
}
bug in sparc gcc 1.28
Author: Michael I. Bushnell
Date: Mon, 26 Sep 1988 21:46
Date: Mon, 26 Sep 1988 21:46
13 lines
872 bytes
872 bytes
Date: Mon, 26 Sep 88 11:33:42 EDT From: Tom Quinn <trq@moose.cita.toronto.edu> The following code will cause gcc to get a fatal signal when compile with "-O". This is gcc version 1.28 on a Sun4/110 running SunOs 4.0. Tom Quinn Canadian Institute for Theoretical Astrophysics This problem does not occur on a vax using the same version of GCC. --Mike Bushnell
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads