[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