ICE from g++-980715, w/small test case (more info)

Paul Henning phenning@cs.uiowa.edu
Sun Jul 19 15:24:00 GMT 1998


Follow up to my own message.  The ICE is caused by a segfault in
gcc/varasm.c(clear_const_double_mem).  The reason for this is because 
the rtl that const_double_chain points to is being overwritten!  At
the point of failure, debug_rtx(const_double_chain) reports:

(call (clobber:QI (const_int 0))
    (const_int 8))

which causes the problem.  The overwrite is happening at
gcc/combine.c (try_combine):1791, during a call to rtvec_alloc for
gen_rtx_PARALLEL(). 

I can see the exact point where the value changes with the following
bit of gdb:

gdb cc1plus
break combine.c:1789
display debug_rtx(const_double_chain)
run -O2 enum.ii
c
s 5
s

The overwrite happens a little earlier.

My uneducated guess is that there is a problem with selecting an
appropriate obstack during the optimization phase, but that is only a
guess.

Paul



More information about the Gcc-bugs mailing list