[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 --- Comment #11 from Jakub Jelinek jakub at gcc dot gnu.org 2011-06-09 07:46:32 UTC --- Author: jakub Date: Thu Jun 9 07:46:28 2011 New Revision: 174839 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=174839 Log: PR middle-end/49308 * dce.c (reset_unmarked_insns_debug_uses): Avoid shadowing insn variable. After resetting and rescanning insn continue with previous statement. * gfortran.dg/pr49308.f90: New test. Added: trunk/gcc/testsuite/gfortran.dg/pr49308.f90 Modified: trunk/gcc/ChangeLog trunk/gcc/dce.c trunk/gcc/testsuite/ChangeLog
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 Jakub Jelinek jakub at gcc dot gnu.org changed: What|Removed |Added Status|ASSIGNED|RESOLVED Resolution||FIXED --- Comment #12 from Jakub Jelinek jakub at gcc dot gnu.org 2011-06-09 07:48:45 UTC --- Fixed.
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 Arthur O'Dwyer arthur.j.odwyer at gmail dot com changed: What|Removed |Added CC||arthur.j.odwyer at gmail ||dot com --- Comment #10 from Arthur O'Dwyer arthur.j.odwyer at gmail dot com 2011-06-08 17:50:12 UTC --- Here's another reduced test case, in C, for what looks like the same bug: cat test.c EOF extern unsigned g_63; extern int g_169; int F(unsigned left, unsigned int right) { return right ? 0 : (unsigned short)left; } void func_73(unsigned p_75) { for (unsigned l_120 = 0; l_120 3; ++l_120) { if (p_75) continue; g_169 = (unsigned) F(g_63 ^ l_120, p_75); } g_169 = 1; } EOF gcc -w -std=c99 -O2 -ggdb test.c [segmentation fault] This test case is reduced from the output of Csmith 2.1.0 (git hash 210eda7f, https://github.com/Quuxplusone/csmith/), using the following command line: csmith --paranoid --no-longlong --no-pointers --arrays --no-jumps --no-consts --no-volatiles --no-checksum --no-divs --no-muls --no-bitfields --no-packed-struct -s 575277166
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 Jakub Jelinek jakub at gcc dot gnu.org changed: What|Removed |Added CC||aoliva at gcc dot gnu.org, ||jakub at gcc dot gnu.org --- Comment #1 from Jakub Jelinek jakub at gcc dot gnu.org 2011-06-07 07:06:49 UTC --- http://gcc.gnu.org/viewcvs?root=gccview=revrev=174699 then. What does: p *defs p *defs-ref say?
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 --- Comment #2 from Joost VandeVondele Joost.VandeVondele at pci dot uzh.ch 2011-06-07 07:12:14 UTC --- (In reply to comment #1) http://gcc.gnu.org/viewcvs?root=gccview=revrev=174699 then. What does: p *defs p *defs-ref say? strangely (gdb) list 513 df_ref use = *use_rec; 514 struct df_link *defs; 515 for (defs = DF_REF_CHAIN (use); defs; defs = defs-next) 516 { 517 rtx insn; 518 if (DF_REF_IS_ARTIFICIAL (defs-ref)) 519 continue; 520 insn = DF_REF_INSN (defs-ref); 521 if (!marked_insn_p (insn)) 522 break; (gdb) p *defs No symbol defs in current context.
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 --- Comment #3 from Jakub Jelinek jakub at gcc dot gnu.org 2011-06-07 07:16:50 UTC --- So p (*use_rec)-base.chain p (*use_rec)-base.chain-ref p *(*use_rec)-base.chain-ref p (*use_rec)-base.chain-next p (*use_rec)-base.chain-next-ref p *(*use_rec)-base.chain-next-ref p (*use_rec)-base.chain-next-next p (*use_rec)-base.chain-next-next-ref p *(*use_rec)-base.chain-next-next-ref ?
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 --- Comment #4 from Joost VandeVondele Joost.VandeVondele at pci dot uzh.ch 2011-06-07 07:33:29 UTC --- (In reply to comment #3) So p (*use_rec)-base.chain ? Program received signal SIGSEGV, Segmentation fault. rest_of_handle_ud_dce () at /data/vondele/gcc_bench/gcc_trunk/gcc/gcc/dce.c:518 518 if (DF_REF_IS_ARTIFICIAL (defs-ref)) (gdb) p (*use_rec)-base.chain No symbol use_rec in current context. No, looks like my gdb doesn't like the code. Is my gdb maybe a bit too old? gdb --version GNU gdb (GDB; openSUSE 11.1) 6.8.50.20081120-cvs
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 --- Comment #5 from Jakub Jelinek jakub at gcc dot gnu.org 2011-06-07 07:35:40 UTC --- Your gdb is very old. Then rm dce.o; make CFLAGS=-g -O0 cc1 cc1plus f951 and retry.
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 --- Comment #6 from Joost VandeVondele Joost.VandeVondele at pci dot uzh.ch 2011-06-07 07:45:53 UTC --- (In reply to comment #5) Your gdb is very old. Then rm dce.o; make CFLAGS=-g -O0 cc1 cc1plus f951 and retry. upgraded gdb instead (7.2). Now I have: (gdb) p *defs Cannot access memory at address 0xafafafafafafafaf (gdb) p *defs-ref Cannot access memory at address 0xafafafafafafafaf (gdb) p (*use_rec)-base.chain $1 = (struct df_link *) 0xafafafafafafafaf (gdb) p (*use_rec) $2 = (df_ref) 0x1638760
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 --- Comment #7 from Joost VandeVondele Joost.VandeVondele at pci dot uzh.ch 2011-06-07 08:27:13 UTC --- reduced testcase: gfortran-trunk -c -O2 -funroll-loops -g bug.f90 bug.f90: In function ‘calculate_first_density_matrix’: bug.f90:29:0: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See http://gcc.gnu.org/bugs.html for instructions. cat bug.f90 MODULE qs_initial_guess TYPE real_matrix_type INTEGER :: sparsity_id END TYPE real_matrix_type TYPE real_matrix_p_type TYPE(real_matrix_type), POINTER :: matrix END TYPE real_matrix_p_type TYPE qs_environment_type TYPE(real_matrix_p_type), DIMENSION(:), POINTER :: matrix_s END TYPE INTEGER, PARAMETER :: default_path_length=250 CONTAINS SUBROUTINE calculate_first_density_matrix() TYPE(qs_environment_type), POINTER :: qs_env CHARACTER(LEN=default_path_length) :: file_name CHARACTER(LEN=default_path_length) :: filename CHARACTER(LEN=default_path_length) :: cp_to_string LOGICAL :: id_equal DO i=1,nvec j = i - 1 IF (j/=0) filename = TRIM(file_name)//.bak-//ADJUSTL(cp_to_string(j)) END DO DO ispin=1, SIZE(qs_env%matrix_s) id_equal=(qs_env%matrix_s(ispin)%matrix%sparsity_id ==qs_env%matrix_s(1)%matrix%sparsity_id) IF(.NOT.(id_equal)) CALL cp_a_l(0==1,cp_failure_level,routineP,39) ENDDO END SUBROUTINE calculate_first_density_matrix END MODULE qs_initial_guess
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 Jakub Jelinek jakub at gcc dot gnu.org changed: What|Removed |Added Status|UNCONFIRMED |ASSIGNED Last reconfirmed||2011.06.07 09:10:25 AssignedTo|unassigned at gcc dot |jakub at gcc dot gnu.org |gnu.org | Ever Confirmed|0 |1 --- Comment #8 from Jakub Jelinek jakub at gcc dot gnu.org 2011-06-07 09:10:25 UTC --- --- dce.c.jj2011-06-06 19:07:08.0 +0200 +++ dce.c2011-06-07 11:08:12.0 +0200 @@ -514,11 +514,11 @@ reset_unmarked_insns_debug_uses (void) struct df_link *defs; for (defs = DF_REF_CHAIN (use); defs; defs = defs-next) { - rtx insn; + rtx ref_insn; if (DF_REF_IS_ARTIFICIAL (defs-ref)) continue; - insn = DF_REF_INSN (defs-ref); - if (!marked_insn_p (insn)) + ref_insn = DF_REF_INSN (defs-ref); + if (!marked_insn_p (ref_insn)) break; } if (!defs) @@ -527,6 +527,7 @@ reset_unmarked_insns_debug_uses (void) each of the DEFs? */ INSN_VAR_LOCATION_LOC (insn) = gen_rtx_UNKNOWN_VAR_LOC (); df_insn_rescan_debug_internal (insn); + break; } } } When we reset/rescan the debug insn, obviously no further testing of that insn is needed and more importantly the old df info isn't valid any longer.
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 --- Comment #9 from Jakub Jelinek jakub at gcc dot gnu.org 2011-06-07 09:44:03 UTC --- Created attachment 24455 -- http://gcc.gnu.org/bugzilla/attachment.cgi?id=24455 gcc47-pr49308.patch Untested fix.
[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49308 Richard Guenther rguenth at gcc dot gnu.org changed: What|Removed |Added Target Milestone|--- |4.7.0