[Bug rtl-optimization/57379] New: [4.9 Regression]: Segfault in invalidate_any_buried_refs (x=0x0) at ../../gcc-svn/trunk/gcc/gcse.c:3850

ubizjak at gmail dot com gcc-bugzilla@gcc.gnu.org
Wed May 22 19:42:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57379

            Bug ID: 57379
           Summary: [4.9 Regression]: Segfault in
                    invalidate_any_buried_refs (x=0x0) at
                    ../../gcc-svn/trunk/gcc/gcse.c:3850
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ubizjak at gmail dot com
            Target: alpha-linux-gnu

Created attachment 30167
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30167&action=edit
Preprocessed source

This is recent regression.

The segfault can be triggered with crosscompiler to alpha-linux-gnu, configured
with:

 "../gcc-svn/trunk/configure --target=alpha-linux-gnu --with-long-double-128"

$ ~/gcc-build-alpha/gcc/cc1 -O2 -fpreprocessed -quiet libgcc2.i -o libgcc2.s

../../../gcc-svn/trunk/libgcc/libgcc2.c: In function ‘__multc3’:
../../../gcc-svn/trunk/libgcc/libgcc2.c:1927:1: internal compiler error:
Segmentation fault
0x8a5c0f crash_signal
        ../../gcc-svn/trunk/gcc/toplev.c:333
0x6fa870 invalidate_any_buried_refs
        ../../gcc-svn/trunk/gcc/gcse.c:3850
0x6fa924 invalidate_any_buried_refs
        ../../gcc-svn/trunk/gcc/gcse.c:3862
0x6fa924 invalidate_any_buried_refs
        ../../gcc-svn/trunk/gcc/gcse.c:3862

gdb session:

(gdb) r
Starting program: /home/uros/gcc-build-alpha/gcc/cc1 -O2 -fpreprocessed -quiet
libgcc2.i -o libgcc2.s

Program received signal SIGSEGV, Segmentation fault.
invalidate_any_buried_refs (x=0x0) at ../../gcc-svn/trunk/gcc/gcse.c:3850
3850      if (MEM_P (x) && simple_mem (x))

(gdb) b
#0  invalidate_any_buried_refs (x=0x0) at ../../gcc-svn/trunk/gcc/gcse.c:3850
#1  0x00000000006fa925 in invalidate_any_buried_refs (x=0x7ffff1884690) at
../../gcc-svn/trunk/gcc/gcse.c:3862
#2  0x00000000006fa925 in invalidate_any_buried_refs (x=0x7ffff1884678) at
../../gcc-svn/trunk/gcc/gcse.c:3862
#3  0x00000000006fa925 in invalidate_any_buried_refs (x=x@entry=0x7ffff1884660)
at ../../gcc-svn/trunk/gcc/gcse.c:3862
#4  0x00000000006fb4c2 in compute_ld_motion_mems () at
../../gcc-svn/trunk/gcc/gcse.c:3922
#5  one_pre_gcse_pass () at ../../gcc-svn/trunk/gcc/gcse.c:2679
#6  execute_rtl_pre () at ../../gcc-svn/trunk/gcc/gcse.c:4119
#7  0x00000000008033f0 in execute_one_pass (pass=pass@entry=0x10765c0
<pass_rtl_pre>) at ../../gcc-svn/trunk/gcc/passes.c:2337
#8  0x0000000000803855 in execute_pass_list (pass=0x10765c0 <pass_rtl_pre>) at
../../gcc-svn/trunk/gcc/passes.c:2389
...

(gdb) f 1
#1  0x00000000006fa925 in invalidate_any_buried_refs (x=0x7ffff1884690) at
../../gcc-svn/trunk/gcc/gcse.c:3862
3862            invalidate_any_buried_refs (XEXP (x, i));
(gdb) p debug_rtx (x)
(expr_list:REG_DEP_TRUE (reg/v:TF 70 [ x ])
    (nil))
$1 = void

(gdb) f 4
#4  0x00000000006fb4c2 in compute_ld_motion_mems () at
../../gcc-svn/trunk/gcc/gcse.c:3922
3922                        invalidate_any_buried_refs (src_eq);
(gdb) p debug_rtx (src_eq)
(expr_list:REG_DEP_TRUE (symbol_ref:DI ("_OtsEqlX") [flags 0x41])
    (expr_list:REG_DEP_TRUE (reg/v:TF 70 [ x ])
        (expr_list:REG_DEP_TRUE (reg/v:TF 70 [ x ])
            (nil))))
$2 = void

(gdb) p debug_rtx (insn)
(insn 65 64 66 2 (set (reg:DI 148)
        (reg:DI 0 $0)) ../../../gcc-svn/trunk/libgcc/libgcc2.c:1882 226
{*movdi}
     (expr_list:REG_DEAD (reg:DI 0 $0)
        (expr_list:REG_EQUAL (expr_list:REG_DEP_TRUE (symbol_ref:DI
("_OtsEqlX") [flags 0x41])
                (expr_list:REG_DEP_TRUE (reg/v:TF 70 [ x ])
                    (expr_list:REG_DEP_TRUE (reg/v:TF 70 [ x ])
                        (nil))))
            (nil))))
$3 = void

It looks like recursion doesn't check for NULL_RTX when processing expr_list.


More information about the Gcc-bugs mailing list