egcs-2.91.16 980328: gcc -O2 gets fatal signal 6 on regex.c
Jim Meyering
meyering@meyering-net-28.eng.ascend.com
Mon Mar 30 23:39:00 GMT 1998
I updated to the CVS `egcs_ss_980328' tag and ran make bootstrap
on a i386-pc-solaris2.5.1 system.
With -O2, the result choked on the first package I tried to build.
It got a fatal 6 on regex.c.
I pared it down to something more manageable and nearly minimal:
% gcc -O2 -c r.c
gcc: Internal compiler error: program cc1 got fatal signal 6
[Exit 1]
% cat r.c
typedef unsigned long int size_t;
struct re_pattern_buffer
{
unsigned char *buffer;
unsigned long int used;
};
struct re_registers
{
int *start;
};
static const char **regstart, **regend;
static const char **old_regend;
static int
re_match_2_internal (struct re_pattern_buffer *bufp,
struct re_registers *regs)
{
unsigned char *p = bufp->buffer;
unsigned char *pend = p + bufp->used;
for (;;)
{
int highest_active_reg = 1;
if (bufp)
{
int i;
for (i = 1;; i++)
regs->start[i] = 0;
}
switch ((unsigned int) *p++)
{
case 1:
{
unsigned char r = *p;
if (r)
highest_active_reg = r;
}
if (p + 2 == pend)
{
char is_a_jump_n = 0;
int mcnt = 0;
unsigned char *p1;
p1 = p + 2;
switch (*p1++)
{
case 2:
is_a_jump_n = 1;
case 1:
do { do { mcnt = *p1; } while (0); p1 += 2; } while (0);
if (is_a_jump_n)
p1 = 0;
}
if (mcnt && *p1 == 0)
{
unsigned r;
for (r = 0; r < (unsigned) *p + (unsigned) *(p + 1); r++)
{
if (regend[0] >= regstart[r])
regend[r] = old_regend[r];
}
do { while (0 < highest_active_reg + 1) { } } while (0);
}
}
}
}
return -1;
}
meyering@hex+% gcc -v
Reading specs from /p/p/egcs-980329/lib/gcc-lib/i386-pc-solaris2.5.1/egcs-2.91.16/specs
gcc version egcs-2.91.16 980328 (gcc-2.8.0 release)
More information about the Gcc-bugs
mailing list