[Bug middle-end/32761] New: build broke: var_tracking loses track of fp-elimination, crashes in find_src_set_src on parallel set
hp at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sat Jul 14 02:05:00 GMT 2007
Build for cris-axis-elf broke with a change in the range 126627:126630, of
which the var_tracking patch is the only suspect, broke build for
cris-axis-elf:
/tmp/hpautotest-gcc1/cris-elf/gccobj/./gcc/xgcc
-B/tmp/hpautotest-gcc1/cris-elf/gccobj/./gcc/ -nostdinc
-B/tmp/hpautotest-gcc1/cr\
is-elf/gccobj/cris-elf/v10/newlib/ -isystem
/tmp/hpautotest-gcc1/cris-elf/gccobj/cris-elf/v10/newlib/targ-include -isystem
/tmp/h\
pautotest-gcc1/gcc/newlib/libc/include
-B/tmp/hpautotest-gcc1/cris-elf/pre/cris-elf/bin/
-B/tmp/hpautotest-gcc1/cris-elf/pre/cris\
-elf/lib/ -isystem /tmp/hpautotest-gcc1/cris-elf/pre/cris-elf/include -isystem
/tmp/hpautotest-gcc1/cris-elf/pre/cris-elf/sys-inc\
lude -march=v10 -mbest-lib-options -DPACKAGE_NAME=\"newlib\"
-DPACKAGE_TARNAME=\"newlib\" -DPACKAGE_VERSION=\"1.15.0\" -DPACKAGE\
_STRING=\"newlib\ 1.15.0\" -DPACKAGE_BUGREPORT=\"\" -I.
-I/tmp/hpautotest-gcc1/gcc/newlib/libc/stdlib -O2 -DHAVE_RENAME -D_USE_W\
RITE -DCOMPACT_CTYPE -fno-builtin -O2 -g -O2 -march=v10
-mbest-lib-options -c -o lib_a-mprec.o `test -f 'mprec.c' || echo \
'/tmp/hpautotest-gcc1/gcc/newlib/libc/stdlib/'`mprec.c
/tmp/hpautotest-gcc1/gcc/newlib/libc/stdlib/mprec.c: In function '__d2b':
/tmp/hpautotest-gcc1/gcc/newlib/libc/stdlib/mprec.c:905: internal compiler
error: Segmentation fault
I had a look with gdb to see if I could spot anything trivial
(needed to recompile var-tracking with CFLAGS=-g to get a debuggable cc1):
Program received signal SIGSEGV, Segmentation fault.
0x00000000007fd943 in find_src_set_src (set=0xbecaf8, loc=0x2ab48c49cca0,
insn=0x2ab48c493d20)
at /tmp/hpautotest-gcc1/gcc/gcc/var-tracking.c:1865
1865 if (REG_P (src))
(gdb) p insn
$1 = (rtx) 0x2ab48c493d20
(gdb) pr
(insn 200 22 25 2 /tmp/hpautotest-gcc1/gcc/newlib/libc/stdlib/mprec.c:787
(parallel [
(set (mem/c/i:SI (plus:SI (reg/f:SI 14 sp)
(const_int 28 [0x1c])) [7 z+0 S4 A16])
(reg:SI 13 r13 [orig:34 z.37 ] [34]))
(set (reg/f:SI 3 r3 [93])
(plus:SI (reg/f:SI 14 sp)
(const_int 28 [0x1c])))
]) 25 {*mov_sidesisf_mem} (nil))
(gdb) p loc
$2 = (rtx) 0x2ab48c49cca0
(gdb) pr
(mem/c/i:SI (plus:SI (reg/f:SI 18 faked_ap)
(const_int -12 [0xfffffffffffffff4])) [7 z+0 S4 A16])
It looks as if find_src_set_src encounters a sp-relative set but expects the
original non-eliminated fp-relative set. For plain single_set sets it uses
that, and apparently copes with a sp-relative setting, but for a parallel set,
it looks it can't match the set and so src remains NULL, hence the REG_P causes
a SEGV. I'm not sure if the method of finding the loc in the set is at fault,
or if the bug is earlier and both the loc and the SET_DEST should be equally
eliminated at the time of the call.
I'm attaching the preprocessed mprec.i, repeat with "cc1 -O2 -g < mprec.i" for
a --target=cris-axis-elf.
--
Summary: build broke: var_tracking loses track of fp-elimination,
crashes in find_src_set_src on parallel set
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Keywords: build
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: hp at gcc dot gnu dot org
GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: cris-axis-elf
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32761
More information about the Gcc-bugs
mailing list