Article View: gnu.gcc.bug
Article #993gcc-2.2.2 fatal signal 11 bug report
From: David Edelsohn
Date: Tue, 25 Aug 1992 16:07
Date: Tue, 25 Aug 1992 16:07
1072 lines
28186 bytes
28186 bytes
The appended source code causes gcc-2.2.2 to crash with an internal
compiler error -- fatal signal 11 from cc1. Gcc configured for both a Risc
System/6000 running AIX 3.1.7 and a Sun Sparcstation running SunOS 3.1.2
demonstrate this bug. The appended code is a trimmed version, with include
files prepended, appropriate for an RS/6000 but a Sparcstation will produce
the same results with additional warnings.
David
% gcc -v bad.c
Reading specs from /contrib/lib/gcc-lib/rs6000/2.2/specs
gcc version 2.2
/contrib/lib/gcc-lib/rs6000/2.2/cpp -lang-c -v -undef -D__GNUC__=2 -D_IBMR2 -D_AIX -D___IBMR2__ -D___AIX__ -D___IBMR2 -D___AIX -D__CHAR_UNSIGNED__ bad.c /tmp/cckcICkR.i
GNU CPP version 2.2
/contrib/lib/gcc-lib/rs6000/2.2/cc1 /tmp/cckcICkR.i -quiet -dumpbase bad.c -version -o /tmp/cckcICkR.s
GNU C version 2.2.2 compiled by GNU C version 2.2.
gcc: Internal compiler error: program cc1 got fatal signal 11
-----bad.c-----
typedef char * va_list;
typedef int ptrdiff_t;
typedef unsigned short wchar_t;
typedef long fpos_t;
typedef long time_t;
typedef int clock_t;
typedef unsigned long size_t;
typedef unsigned char uchar_t;
typedef unsigned short ushort_t;
typedef unsigned int uint_t;
typedef unsigned long ulong_t;
typedef struct { int r[1]; } * physadr_t;
typedef long level_t;
typedef long daddr_t;
typedef char * caddr_t;
typedef ulong_t ino_t;
typedef short cnt_t;
typedef ulong_t dev_t;
typedef long chan_t;
typedef long off_t;
typedef long paddr_t;
typedef long key_t;
typedef long timer_t;
typedef short nlink_t;
typedef ulong_t mode_t;
typedef ulong_t uid_t;
typedef ulong_t gid_t;
typedef void * mid_t;
typedef int pid_t;
typedef char slab_t[12];
typedef long mtyp_t;
typedef struct label_t {
struct label_t *prev;
ulong_t iar;
ulong_t stack;
ulong_t toc;
ulong_t cr;
ulong_t intpri;
ulong_t reg[19];
} label_t;
typedef long vmid_t;
typedef ulong_t vmhandle_t;
typedef struct vmaddr_t {
vmhandle_t srval;
caddr_t offset;
} vmaddr_t;
typedef struct adspace_t{
ulong_t alloc;
vmhandle_t srval[16];
} adspace_t;
typedef struct sigset_t {
unsigned long losigs;
unsigned long hisigs;
} sigset_t;
typedef uchar_t uchar;
typedef ushort_t ushort;
typedef uint_t uint;
typedef ulong_t ulong;
typedef physadr_t physadr;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef struct _quad { long val[2]; } quad;
typedef long swblk_t;
struct sigset {
unsigned long losigs;
unsigned long hisigs;
};
struct fsid {
long val[2];
};
typedef struct fsid fsid_t;
struct fid {
uint_t fid_len;
char fid_data[( 32 - sizeof(fsid_t) - sizeof(uint_t)) ];
};
typedef struct fid fid_t;
struct fileid {
uint_t fid_len;
ino_t fid_ino;
uint_t fid_gen;
char fid_x[( 32 - sizeof(fsid_t) - sizeof(uint_t)) - (sizeof(ino_t) + 2) - sizeof(uint_t)];
};
struct fhandle {
char x[ 32 ];
};
struct filehandle {
fsid_t fh_fsid;
struct fileid fh_fid;
};
typedef struct fhandle fhandle_t;
struct unique_id {
unsigned long word1;
unsigned long word2;
unsigned long word3;
unsigned long word4;
};
typedef struct unique_id unique_id_t;
typedef struct coldesc {
short cd_stroff;
short cd_repoff;
short cd_cval;
short cd_cuniq;
} coldesc_t;
typedef struct collation_table {
short lc_version;
short lc_length;
char *lc_locale_name;
int len_collate;
short *lc_collate;
int len_coluniq;
short *lc_coluniq;
int len_coldesc;
coldesc_t *lc_coldesc;
int len_strings;
wchar_t *lc_strings;
int high_cvalue;
} col_t;
typedef struct char_classification_table {
short lc_version;
short lc_length;
short lc_code_type;
short mb_cur_max;
short mb_cur_min;
short lc_dsp_width;
char *lc_locale_name;
int len_caseconv;
wchar_t *lc_caseconv;
int len_ctype;
unsigned short *lc_ctype;
} ctype_t;
typedef struct lc_monetary_table {
short lc_version;
short lc_length;
char *lc_locale_name;
char *int_curr_symbol;
char *currency_symbol;
char *mon_decimal_point;
char *mon_thousands_sep;
char *mon_grouping;
char *positive_sign;
char *negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
} mon_t;
typedef struct numeric_table {
short lc_version;
short lc_length;
char *lc_locale_name;
char *decimal_point;
char *thousands_sep;
char *grouping;
} num_t;
typedef struct lc_messages_table {
short lc_version;
short lc_length;
char *lc_locale_name;
char *messages;
char *yes_string;
char *no_string;
} msg_t;
typedef struct lc_time_table {
short lc_version;
short lc_length;
char *lc_locale_name;
char *t_fmt;
char *d_fmt;
char *nlldate;
char *d_t_fmt;
char *abday;
char *day;
char *abmon;
char *mon;
char *misc;
char *tstrs;
char *tunits;
char *year;
char *am_pm;
} tim_t;
typedef struct wchar_mapping_table {
short lc_version;
short lc_length;
char *lc_identifier;
} map_t;
typedef struct localeinfo_table {
char lc_mag0, lc_mag1;
short lc_version;
short lc_code_type;
short lc_length;
col_t *lc_coltbl;
ctype_t *lc_chrtbl;
mon_t *lc_montbl;
num_t *lc_numtbl;
tim_t *lc_timtbl;
msg_t *lc_msgtbl;
map_t *lc_maptbl;
} loc_t;
extern loc_t *_locp;
typedef unsigned short NLchar;
extern char
*NLstrcpy(),
*NLstrncpy(),
*NLstrcat(),
*NLstrncat(),
*NLstrchr(),
*NLstrrchr(),
*NLstrpbrk(),
*NLstrtok();
extern NLchar
*NCstrcpy(),
*NCstrncpy(),
*NCstrcat(),
*NCstrncat(),
*NCstrchr(),
*NCstrrchr(),
*NCstrpbrk(),
*NCstrtok();
extern NLchar *_NCgetbuf();
extern void free(void *ptr);
extern char _NLflattab[];
extern unsigned _NLflattsize;
extern char _NLesctab[][2];
extern unsigned _NLesctsize;
extern unsigned _NLunesctsize;
extern struct NLescdata {
unsigned char *key;
NLchar value;
} _NLunesctab[];
extern int isascii(int c);
extern int toascii(int c);
extern int errno;
extern int errno;
extern char *setlocale(int category, const char *locale);
extern struct lconv *localeconv(void);
typedef struct lconv {
char *decimal_point;
char *thousands_sep;
char *grouping;
char *int_curr_symbol;
char *currency_symbol;
char *mon_decimal_point;
char *mon_thousands_sep;
char *mon_grouping;
char *positive_sign;
char *negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
} lconv;
extern unsigned _DBLINF[2];
extern double acos(double x);
extern double asin(double x);
extern double atan(double x);
extern double atan2(double x,double y);
extern double ceil(double x);
extern double cos(double x);
extern double cosh(double x);
extern double exp(double x);
extern double fabs(double x);
extern double floor(double x);
extern double fmod(double x, double y);
extern double frexp(double value, int *exp);
extern double ldexp(double x, int exp);
extern double log(double x);
extern double log10(double x);
extern double modf(double value, double *iptr);
extern double pow(double x, double y);
extern double sin(double x);
extern double sinh(double x);
extern double sqrt(double x);
extern double tan(double x);
extern double tanh(double x);
extern int signgam;
extern unsigned int SFPMAX;
extern double erf(double x);
extern double erfc(double x);
extern int isnan(double x);
extern double hypot(double x,double y);
extern double j0(double x);
extern double j1(double x);
extern double jn(int n, double x);
extern double gamma(double x);
extern double lgamma(double x);
extern double y0(double x);
extern double y1(double x);
extern double yn(int n, double x);
typedef struct div_t {
int quot;
int rem; } div_t;
typedef struct ldiv_t {
long int quot;
long int rem; } ldiv_t;
extern double atof(const char *nptr);
extern int atoi(const char *nptr);
extern long int atol(const char *nptr);
extern double strtod(const char *nptr, char * *endptr);
extern long int strtol(const char *nptr, char * *endptr, int base);
extern unsigned long int strtoul(const char *nptr, char * *endptr, int base);
extern int rand(void);
extern void srand(unsigned int seed);
extern void *calloc(size_t nmemb, size_t size);
extern void free(void *ptr);
extern void *malloc(size_t size);
extern void *realloc(void *ptr, size_t size);
extern void abort(void);
extern int atexit(void (*func)(void));
extern void exit(int status);
extern char *getenv(const char *name);
extern int system(const char *string);
extern void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int(*compar)());
extern void qsort(void *base, size_t nmemb, size_t size, int(*compar)());
extern int abs(int j);
extern struct div_t div(int numer, int denom);
extern long int labs(long int j);
extern struct ldiv_t ldiv(long int numer, long int denom);
extern int mblen(const char *s, size_t n);
extern int mbtowc(wchar_t *pwc, const char *s, size_t n);
extern int wctomb(char *s, wchar_t wchar);
extern size_t mbstowcs(wchar_t *pwcs, const char *s,size_t n);
extern size_t wcstombs(char *s, const wchar_t *pwcs,size_t n);
float atoff();
char *ecvt();
char *fcvt();
char *gcvt();
float strtof();
void imul_dbl();
void umul_dbl();
struct dbl_hypot {
double x, y;
};
extern double acosh(double x);
extern double asinh(double x);
extern double atanh(double x);
extern double cabs(struct dbl_hypot p_dbl);
extern double cbrt(double x);
extern double copysign (double x, double y);
extern double drem(double x, double y);
extern double exp__E(double x, double y);
extern double expm1(double x);
extern double log1p(double x);
extern double log__L(double x);
extern double nearest(double x);
extern double rint(double x);
extern double scalb(double x, int n);
extern double trunc(double x);
extern int itrunc(double x);
extern int unordered(double x, double y);
extern unsigned uitrunc(double x);
extern int dtoi(double x);
extern double logb();
extern int ilogb();
extern double nextafter();
extern int class();
extern int finite();
struct exception {
int type;
char *name;
double arg1;
double arg2;
double retval;
};
typedef int jmp_buf[64 ];
extern void longjmp(jmp_buf env, int val);
extern int setjmp(jmp_buf env);
typedef int sigjmp_buf[64 ];
extern int sigsetjmp(sigjmp_buf env, int savemask);
extern void siglongjmp(sigjmp_buf env, int val);
extern void (*signal(int sig, void (*func)(int)))(int);
extern int raise(int sig);
typedef volatile int sig_atomic_t;
struct sigaction {
void (*sa_handler)(int);
sigset_t sa_mask;
int sa_flags;
};
extern int kill(pid_t pid, int sig);
extern int sigaction(int sig, struct sigaction *act, struct sigaction *oact);
extern int sigprocmask(int how, sigset_t *set, sigset_t *oset);
extern int sigsuspend(sigset_t *set);
extern int sigemptyset(sigset_t *set);
extern int sigfillset(sigset_t *set);
extern int sigaddset(sigset_t *set, int signo);
extern int sigdelset(sigset_t *set, int signo);
extern int sigismember(sigset_t *set, int signo);
extern int sigpending(sigset_t *set);
struct mstsave {
struct mstsave *prev;
label_t *kjmpbuf;
char *stackfix;
char intpri;
char backt;
char rsvd[2];
pid_t curid;
int excp_type;
ulong_t iar;
ulong_t msr;
ulong_t cr;
ulong_t lr;
ulong_t ctr;
ulong_t xer;
ulong_t mq;
ulong_t tid;
ulong_t fpscr;
char fpeu;
char pad[3];
ulong_t except[5];
void *bus;
ulong_t o_iar;
ulong_t o_toc;
ulong_t o_arg1;
ulong_t excbranch;
ulong_t cachealign[9];
adspace_t as;
ulong_t gpr[32 ];
double fpr[32 ];
};
struct jmpbuf {
struct mstsave jmp_context;
};
extern int sigstack();
struct sigstack {
char *ss_sp;
int ss_onstack;
};
struct sigcontext {
int sc_onstack;
sigset_t sc_mask;
int u_error;
struct jmpbuf sc_jmpbuf;
};
struct sigvec {
void (*sv_handler)(int);
int sv_mask;
int sv_flags;
};
void va_end (va_list);
typedef struct {
unsigned char *_ptr;
int _cnt;
unsigned char *_base;
unsigned char *_bufendp;
short _flag;
short _file;
int _unused[3];
} FILE;
extern FILE _iob[ 20 ];
extern size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
extern size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
extern int _filbuf(FILE *iop);
extern int _flsbuf(unsigned char c, FILE *iop);
extern int ferror(FILE *stream);
extern int feof(FILE *stream);
extern void clearerr(FILE * stream);
extern int putchar(int c);
extern int getchar(void);
extern int putc(int c, FILE *stream);
extern int getc(FILE *stream);
extern int remove(const char *filename);
extern int rename(const char *old, const char *new);
extern FILE *tmpfile(void);
extern char *tmpnam(char *s);
extern int fclose(FILE *stream);
extern int fflush(FILE *stream);
extern FILE *fopen(const char *filename, const char *mode);
extern FILE *freopen(const char *filename, const char *mode, FILE *stream);
extern void setbuf(FILE *stream, char *buf);
extern int setvbuf(FILE *stream, char *buf, int mode, size_t size);
extern int fprintf(FILE *stream, const char *format, ...);
extern int fscanf(FILE *stream, const char *format, ...);
extern int printf(const char *format, ...);
extern int scanf(const char *format, ...);
extern int sprintf(char *s, const char *format, ...);
extern int sscanf(const char *s, const char *format, ...);
extern int vfprintf(FILE *stream, const char *format, va_list arg);
extern int vprintf(const char *format, va_list arg);
extern int vsprintf(char *s, const char *format, va_list arg);
extern int fgetc(FILE *stream);
extern char *fgets(char *s, int n, FILE *stream);
extern int fputc(int c, FILE *stream);
extern int fputs(const char *s, FILE *stream);
extern char *gets(char *s);
extern int puts(const char *s);
extern int ungetc(int c, FILE *stream);
extern int fgetpos(FILE *stream, fpos_t *pos);
extern int fseek(FILE *stream, long int offset, int whence);
extern int fsetpos(FILE *stream, const fpos_t *pos);
extern long ftell(FILE *stream);
extern void rewind(FILE *stream);
extern void perror(const char *s);
extern int fileno(FILE *stream);
extern FILE *fdopen(int fildes, char *type);
extern int getw(FILE *stream);
extern int putw(int w, FILE *stream);
extern char *tempnam(char*,char*);
extern FILE *popen(char *cmd, char *mode);
extern int pclose(FILE *ptr);
extern char *ctermid(char *);
extern char *cuserid(char *);
extern void *memchr(const void *s, int c, size_t n);
extern void *memcpy(void *s1, const void *s2, size_t n);
extern void *memset(void *s, int c, size_t n);
extern size_t strcspn(const char *s1, const char *s2);
extern size_t strlen(const char *s);
extern size_t strspn(const char *s1, const char *s2);
extern void *memmove(void *s1, const void *s2, size_t n);
extern char *strcpy(char *s1, const char *s2);
extern char *strncpy(char *s1, const char *s2, size_t n);
extern char *strcat(char *s1, const char *s2);
extern char *strncat(char *s1, const char *s2, size_t n);
extern int memcmp(const void *s1, const void *s2,size_t n);
extern int strcmp(const char *s1, const char *s2);
extern int strcoll(const char *s1, const char *s2);
extern int strncmp(const char *s1,const char *s2,size_t n);
extern size_t strxfrm(char *s1, const char *s2, size_t n);
extern int strncollen(const char *, const int );
extern char *strchr(const char *s, int c);
extern char *strpbrk(const char *s1, const char *s2);
extern char *strrchr(const char *s, int c);
extern char *strstr(const char *s1, const char *s2);
extern char *strtok(char *s1, const char *s2);
extern char *strerror(int errnum);
extern void *memccpy(void *target, const void *source, int c, size_t n);
extern char *index(const char *s, int c);
extern char *rindex(const char *s, int c);
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
extern clock_t clock(void);
extern double difftime(time_t time1, time_t time0);
extern time_t mktime(struct tm *timeptr);
extern time_t time(time_t *timer);
extern char *asctime(const struct tm *timeptr);
extern char *ctime(const time_t *timer);
extern struct tm *gmtime(const time_t *timer);
extern struct tm *localtime(const time_t *timer);
extern size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *timeptr);
extern char *tzname[];
extern void tzset(void);
extern long timezone;
extern int daylight;
extern unsigned char *NLctime(long *t);
extern unsigned char *NLasctime(struct tm *t);
extern char *NLstrtime(char *s, size_t maxsize, const char *format, const struct tm *timeptr);
typedef unsigned char UByte;
typedef unsigned short UShort;
typedef unsigned long ULong;
typedef long AInt;
typedef unsigned long UAInt;
typedef int Bool;
typedef UAInt Hash;
typedef size_t Length;
typedef ULong Offset;
typedef ULong Millisec;
typedef void *Pointer;
typedef const void *ConstPointer;
typedef char *String;
typedef char *IOMode;
typedef float SFloat;
typedef double DFloat;
typedef long double LongDouble;
typedef double MostAlignedType;
extern int osRun (String);
extern Millisec osCpuTime (void);
extern String osDate (void);
extern String osGetenv (String envar);
extern String osExtSep;
extern String osDirSep;
extern String osPathSep;
extern String osCurDirName;
extern String osDefaultExecutePath;
extern String osDefaultLibraryPath;
extern String osDefaultIncludePath;
extern String osExecutePath (void);
extern String osLibraryPath (void);
extern String osIncludePath (void);
extern void osFnameParse (String* partv, String buffer,
String fname, String relativeTo);
extern String osFnameUnparse (String dir, String name, String type,
String buffer);
extern Length osFnameLength (String dir, String name, String type);
extern IOMode osIoRdMode;
extern IOMode osIoWrMode;
extern IOMode osIoApMode;
extern IOMode osIoRbMode;
extern IOMode osIoWbMode;
extern IOMode osIoAbMode;
extern IOMode osIoRubMode;
extern IOMode osIoWubMode;
extern IOMode osIoAubMode;
extern int osFileRemove (String fn);
extern Hash osFileHash (String fn);
extern Bool osIsInteractive(FILE *);
typedef void (*SignalHandler) (int signal);
extern SignalHandler osSetBreakHandler(SignalHandler);
extern SignalHandler osSetFaultHandler(SignalHandler);
extern SignalHandler osSetLimitHandler(SignalHandler);
extern Pointer osAllocBytes (unsigned align, unsigned long nbytes);
struct osMemMap {
int use;
Pointer lo, hi;
};
extern struct osMemMap *osMemMap(int mask);
enum osCcTag {
OSCC_START,
OSCC_LibPath = OSCC_START,
OSCC_Library,
OSCC_IncPath,
OSCC_Define,
OSCC_Undefine,
OSCC_Optimize,
OSCC_DebugInfo,
OSCC_ProfileInfo,
OSCC_OutputFile,
OSCC_LIMIT
};
struct osCcOption {
enum osCcTag tag;
String arg;
struct osCcOption *next;
};
extern int osCCompileCommand (String buf, int fnc, String *fnv,
struct osCcOption *,
String cmd, String xopts);
extern int osLinkCommand (String buf , int fnc, String *fnv,
struct osCcOption *,
String cmd, String xopts);
struct osObjectRenumber {
char * functionName;
int oldStart, newStart;
int lnoc;
struct {int old, new;} *lnov;
};
extern void osObjectRenumber (String fname, struct osObjectRenumber *);
extern void testSelf (String testName);
extern Bool dbFlag;
extern int findent;
extern int fnewline (FILE *f);
typedef int (*XPutFun) (const char *s, int n);
extern int xprintf (XPutFun, const char *fmt, ...);
extern int vxprintf (XPutFun, const char *fmt, va_list argp);
struct fluidCell {
String scopeName;
int scopeLevel;
Pointer pglobal,
pstack;
long size;
};
typedef struct {
int fluidLevel;
jmp_buf buf;
} JmpBuf;
extern struct fluidCell *fluidStack;
extern int fluidLevel,
fluidLimit,
fluidIncrement;
extern int scopeLevel;
extern struct fluidCell *fluidGrow (void);
extern void fluidUnwind (int toCell, Bool isLongJmp);
extern MostAlignedType* stoAlloc (unsigned code, Length size);
extern void stoFree (Pointer p);
extern void stoGc (void);
extern Length stoSize (Pointer p);
extern MostAlignedType* stoResize (Pointer p, Length size);
extern unsigned stoCode (Pointer p);
extern MostAlignedType* stoRecode (Pointer p, unsigned code);
extern Bool stoIsPointer (Pointer p);
extern void stoAudit (void);
extern void stoShow (void);
extern ULong stoBytesOwn;
extern ULong stoBytesAlloc;
extern ULong stoBytesFree;
extern ULong stoBytesGc;
extern ULong stoPiecesGc[32 ];
typedef MostAlignedType* (*StoErrorFun) (int errnum);
extern StoErrorFun stoSetHandler (StoErrorFun);
extern StoErrorFun stoSetFreeAgain (StoErrorFun);
extern void exitSuccess ();
extern void exitFailure ();
typedef void (*ExitFun) (int status);
extern ExitFun exitSetHandler (ExitFun);
extern Bool exitTrap;
extern void bug (String fmt, ...);
extern ULong _binPrime[];
extern int cielLg (ULong);
typedef struct btree *BTree;
typedef struct btreePart *BTreePart;
typedef Length BTreeKey;
typedef Pointer BTreeElt;
typedef BTreeElt (*BTreeEltFun) (BTreeElt);
typedef BTree (*BTreeAllocFun)(Length nbytes);
typedef void (*BTreeFreeFun) (BTree);
struct btreePart {
BTree branch;
BTreeKey key;
BTreeElt entry;
};
struct btree {
Bool isLeaf;
unsigned short t;
unsigned short nKeys;
struct btreePart part[ 10 ];
};
extern BTree btreeNew (Length t);
extern void btreeFree (BTree);
extern void btreeInsert (BTree*, BTreeKey, BTreeElt);
extern void btreeDelete (BTree*, BTreeKey, BTreeElt *);
extern BTree btreeNewX (Length t, BTreeAllocFun);
extern void btreeFreeX (BTree, BTreeFreeFun);
extern void btreeInsertX (BTree*, BTreeKey, BTreeElt, BTreeAllocFun);
extern void btreeDeleteX (BTree*, BTreeKey, BTreeElt *,BTreeFreeFun);
extern BTree btreeNMap (BTreeEltFun, BTree);
extern BTree btreeSearchEQ (BTree, BTreeKey, int *pIx);
extern BTree btreeSearchGE (BTree, BTreeKey, int *pIx);
extern BTree btreeSearchMin (BTree, int *pIx);
extern BTree btreeSearchMax (BTree, int *pIx);
extern int btreeCheck (BTree);
extern int btreePrint (FILE *, BTree);
static Length fixedSize[] = {
4, 8, 16, 24, 32, 40, 48, 64, 80, 96, 128
};
static UByte fixedSizeFor [ 128 +1];
static UByte fixedSizeIndexFor[ 128 +1];
enum PgKind {
PgFree,
PgBusyFirst,
PgBusyFollow,
PgPgMap,
PgBTree,
PgDLL,
PgForeign
};
typedef char Page[(1L<< 12 ) ];
typedef UByte PgInfo;
typedef UByte QmInfo;
typedef enum PgKind PgKind;
typedef struct PgMem PgMem;
typedef struct Section Section;
typedef struct FxMem FxMem;
typedef struct MxMem MxMem;
static MostAlignedType *stoDefaultError (int errnum);
static StoErrorFun stoError = stoDefaultError;
static StoErrorFun stoFreeAgain = stoDefaultError;
static int stoIsInit = 0;
static char *heapStart,
*heapEnd;
static PgInfo *pgMap;
static Length pgMapSize;
static Length pgMapUses;
static PgMem *freePages;
static FxMem *fixedPieces[ (sizeof(fixedSize)/sizeof(fixedSize[0])) ];
static BTree mixedPieces;
static MxMem *mixedFrontier;
ULong stoBytesOwn;
ULong stoBytesAlloc;
ULong stoBytesFree;
ULong stoBytesGc;
ULong stoPiecesGc[32 ];
struct Section {
short pgCount;
short qmSize;
UByte qmSizeIndex;
UByte isFixed;
Length qmCount;
Pointer data;
QmInfo info[ 10 ];
};
static Length
sectQmCount(Length pageCount, Length qmSize)
{
return (pageCount * (1L<< 12 ) - (sizeof(Section) + 0 * sizeof( QmInfo) - 10 * sizeof( QmInfo)) )/(qmSize + sizeof(QmInfo));
}
static Section *
sectPrepare(Page *p, Length npages, Length sz, int isFixed)
{
Section *x = (Section *) p;
Length i, nq;
x->pgCount = npages;
x->qmSize = sz;
x->qmSizeIndex = fixedSizeIndexFor[sz <= 128 ? sz : 0];
x->isFixed = isFixed;
x->qmCount = nq = sectQmCount(npages, sz);
x->data = (Pointer)((char *) p + npages * (1L<< 12 ) -nq * sz);
x->info[0] = ( 0x40 ) ;
if (isFixed)
for (i = 1; i < nq; i++)
x->info[i] = ( 0x40 ) ;
else
for (i = 1; i < nq; i++)
x->info[i] = ( 0x00 ) ;
return x;
}
static Section *
_sectFor(Pointer p)
{
Length pi;
if (!isInHeap(p)) goto error;
pi = pgNo(p);
if (pgMap[pi] == PgBusyFirst)
return (Section *)((Page *) heapStart + pi);
if (pgMap[pi] != PgBusyFollow)
goto error;
while (pgMap[pi] == PgBusyFollow)
pi--;
if (pgMap[pi] == PgBusyFirst)
return (Section *)((Page *) heapStart + pi);
error: (*stoError)(2 );
{printf("Not supposed to reach line %d in file: %s\n",359, "store.c"); return 0;} ;
}
===============================================================================
David Edelsohn T.J. Watson Research Center
c$dje@watson.ibm.com P.O. Box 218
+1 914 945 3011 (Tieline 862) Yorktown Heights, NY 10598
"If G-D had wanted us to vote, he would have given us candidates" -- Jay Leno
Technical Details
Message-ID:
<9208251607.AA25885@tweetie.watson.ibm.com>Path:
arc1-ca.pugleaf.net!sparky!uunet!stanford.edu!ames!uakari.primate.wisc.edu!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!watson.ibm.com!c$djeShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!stanford.edu!ames!uakari.primate.wisc.edu!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!watson.ibm.com!c$dje From: c$dje@watson.ibm.com (David Edelsohn) Newsgroups: gnu.gcc.bug Subject: gcc-2.2.2 fatal signal 11 bug report Message-ID: <9208251607.AA25885@tweetie.watson.ibm.com> Date: 25 Aug 92 16:07:26 GMT Sender: gnulists@ai.mit.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 1072 Approved: bug-gcc@prep.ai.mit.edu