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