ICE on IA-64 when compiling SPEC 2000 176.gcc at -O1
Reva Cuthbertson
reva@cup.hp.com
Thu Dec 6 12:57:00 GMT 2001
Richard Henderson wrote:
> On Wed, Dec 05, 2001 at 05:07:50PM -0800, Reva Cuthbertson wrote:
> > ... and it happens because the born_index > death_index test fails so
> > we call abort().
>
> This is normally due to register life info being incorrect.
>
> That is, on input to local_alloc some register was reported
> to be set once and never die (certainly possible), yet the
> register does in fact die.
>
> Can't debug this further without a test case.
>
> r~
Richard,
The problem can be seen when compiling the function
output_signed_leb128() in dwarfout.c in the gcc sources.
The function itself has been commented out on the main
branch so the problem does not happen if you compile
dwarfout.c with -O1. However, the function output_signed_leb128()
is part of 176.gcc in SPEC 2000. For convenience, I cut down
output_signed_leb128() into the following test case. Compile
this with -O1 using gcc 3.1 for IA-64 and the internal compiler
error should occur.
static void
output_signed_leb128 (value)
long value;
{
int more;
do
{
unsigned byte = (value & 0x7f);
value >>= 7;
if (((value == 0) && ((byte & 0x40) == 0))
|| ((value == -1) && ((byte & 0x40) == 1)))
more = 0;
}
while (more);
}
Thanks!
Reva
More information about the Gcc
mailing list