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.