Internal compiler error in `emit_call_1' - vax-dec-ultrix4.3

John David Anglin dave@hiauly1.hia.nrc.ca
Wed Aug 4 12:40:00 GMT 1999


The following error occurs bootstrapping gcc version 2.95 19990728 (release)
on a vax-dec-ultrix4.3 machine.  It occurs in stage1 compiling the module
_varargs.o in libgcc2.c.

...
_varargs
../../gcc/libgcc2.c: In function `__builtin_saveregs':
../../gcc/libgcc2.c:1396: Internal compiler error in `emit_call_1', at calls.c:4
46
Please submit a full bug report.

On the vax, __builtin_saveregs is simply

void *
__builtin_saveregs ()
{
  abort ();
} 

The internal compiler error occurs when emit_call_1 is called with the
arguments:

emit_call_1 (funexp=0x176978, fndecl=0x176914, funtype=0x1a12f0, stack_size=0, 
    rounded_stack_size=0, struct_value_size=0, next_arg_reg=0x0, valreg=0x0, 
    old_inhibit_defer_pop=0, call_fusage=0x0, is_const=0)

Note that stack_size=0.  This is the expected value for a function with
no argument bytes to pop.

On the vax, RETURN_POPS_ARGS is:

#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) (SIZE)

As a result, the variable n_popped in emit_call_1 is 0 and the `if' at
line 408 results in the internal compiler error.

Clearly, the code needs to handle the case where n_popped=0.  Possibly,
the condition `n_popped > 0' can be eliminated from the `if' at line 408?

-- 
J. David Anglin                                  dave.anglin@nrc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6605)


More information about the Gcc-bugs mailing list