[Bug middle-end/49308] [4.7 Regression] segfault in rest_of_handle_ud_dce () at gcc/gcc/dce.c:518

2011-06-09 Thread jakub at gcc dot gnu.org
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

2011-06-09 Thread jakub at gcc dot gnu.org
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

2011-06-08 Thread arthur.j.odwyer at gmail dot com
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

2011-06-07 Thread jakub at gcc dot gnu.org
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

2011-06-07 Thread Joost.VandeVondele at pci dot uzh.ch
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

2011-06-07 Thread jakub at gcc dot gnu.org
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

2011-06-07 Thread Joost.VandeVondele at pci dot uzh.ch
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

2011-06-07 Thread jakub at gcc dot gnu.org
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

2011-06-07 Thread Joost.VandeVondele at pci dot uzh.ch
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

2011-06-07 Thread Joost.VandeVondele at pci dot uzh.ch
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

2011-06-07 Thread jakub at gcc dot gnu.org
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

2011-06-07 Thread jakub at gcc dot gnu.org
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

2011-06-07 Thread rguenth at gcc dot gnu.org
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