schmidt%blanche.ics.uci.edu@ORION.CF.UCI.EDU ("Douglas C. Schmidt") (11/24/88)
Bug Report for GCC:
- -------------------
Problem : gcc 1.31 produces incorrect asm code with -p option on
the sequent 386.
1.) Version : gcc 1.31
- -----------
2.) Input Program :
- -----------------
/* compile with -p on the Sequent Symmetry */
#include <stdio.h>
#include "mylib.h"
#include "myincludes.h"
#define MIN_WORD_SIZE 2
#define MAX_WORD_SIZE 9
#define MIN_KEY_SIZE 4
#define MAX_KEY_SIZE 72
/*
perfect: 36 keywords
perfect: 69 is the maximum key range
*/
static unsigned char access_table[] = {
0, 0, 0, 0, 0, 4, 4, 4, 4, 4,
4, 8, 13, 17, 17, 25, 25, 29, 35, 39,
44, 52, 56, 60, 66, 71, 74, 82, 87, 93,
100,100,103,108,110,119,119,122,128,135,
141,146,152,158,158,158,158,158,164,164,
164,164,164,164,168,168,176,176,178,178,
178,178,178,178,184,184,184,184,184,184,
184,184,184,190 };
static char *word_table =
"elsecaseconstautocontinuecharexternenumbreakregistergoto\
longreturnwhileasmvolatilefloattypeoftypedefforuniondo__alignof\
intdoubledefaultinlineshortstructswitchstaticvoidunsignedif\
sizeofsigned";
inline static int hash(str,len)
register char *str;
register int len;
{
static int cval[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 3, 0, 8, 14, 6,
31, 0, 22, 17, 1, 33, 0, 0, 1, 14,
11, 0, 0, 0, 6, 35, 0, 16, 18, 19,
0, 0, 0, 0, 0, 0, 0, 0,
};
register int hval;
switch(hval = len) {
default:
hval += cval[(int)str[0]];
hval += cval[(int)str[len - 1]];
case 0:
return(hval);
}
}
inline static in_word_set(str,len)
register char *str;
register int len;
{
if (len >= MIN_WORD_SIZE && len <= MAX_WORD_SIZE) {
register int key = hash(str,len);
if (key >= MIN_KEY_SIZE && key <= MAX_KEY_SIZE) {
register int i = access_table[key];
register int j = access_table[key+1];
while (i < j) {
if (*str++ != word_table[i++]) {
return(0);
}
}
return(*str == '\0');
}
}
return(0);
}
main() {
char Buf[80];
int Len;
int i = 0;
while((Len = Get_Line(Buf,80)) != EOF) {
if (in_word_set(Buf,Len)) {
i++;
}
}
printf("i = %d\n",i);
}
3.) Command Used : gcc -v
- ----------------
4.) Files used : config.gcc sequent-386
- --------------
5.) Machine(s) used :
- -------------------
Sequent Symmetry DYNIX (TM)V3 (BSD 4.3 features)
6.) Compiler diagnostics :
- ------------------------
gcc version 1.31
/usr/public/lib/gcc/gcc-cpp -v -I/q1/ue/schmidt/include/ -undef -D__GNU__ -D__GNUC__ -Dunix -Di386 -Dsequent prof-bug.1.28.c /tmp/cc005213.cpp
GNU CPP version 1.31
/usr/public/lib/gcc/gcc-cc1 /tmp/cc005213.cpp -quiet -dumpbase prof-bug.1.28.c -version -p -o /tmp/cc005213.s
GNU C version 1.31 (80386, BSD syntax) compiled by GNU C version 1.31.
as /tmp/cc005213.s -o prof-bug.1.28.o
Assembler:
"prof-bug.1.28.c", line 232: "lea" is not followed by a ':' for a label definition