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