From: Richard Guenther Date: Wed, 30 Jul 2008 15:43:42 +0000 (+0000) Subject: re PR tree-optimization/36967 (segfault in is_gimple_real_type with -fpredictive... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5f8ecf453f015c3862113b1fa22bbf0e6b03f7b9;p=gcc.git re PR tree-optimization/36967 (segfault in is_gimple_real_type with -fpredictive-commoning -ffast-math) 2008-07-30 Richard Guenther PR tree-optimization/36967 * tree-predcom.c (remove_stmt): Use gimple_assign_ssa_name_copy_p. Release defs of statements we remove. * gfortran.dg/pr36967.f: New testcase. From-SVN: r138318 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4e6acf0e627..474cc2cc90c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-07-30 Richard Guenther + + PR tree-optimization/36967 + * tree-predcom.c (remove_stmt): Use gimple_assign_ssa_name_copy_p. + Release defs of statements we remove. + 2008-07-30 Nathan Froyd * config/arm/arm.c (arm_expand_prologue): Use 0-length rtvec diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c53755b4db0..cdfa2945dcf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-07-30 Richard Guenther + + PR tree-optimization/36967 + * gfortran.dg/pr36967.f: New testcase. + 2008-07-30 Rafael Avila de Espindola * gcc.dg/visibility-14.c: New test. diff --git a/gcc/testsuite/gfortran.dg/pr36967.f b/gcc/testsuite/gfortran.dg/pr36967.f new file mode 100644 index 00000000000..4f8589771b8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr36967.f @@ -0,0 +1,25 @@ +! { dg-options "-O2 -fpredictive-commoning" } + subroutine foo(x,y,n) + integer n + real*8 y(n,n,n),x(n,n,n) + integer k, j, i + do k = 2, n-1 + do j = 2, n-1 + do I = 2, n-1 + y(i,j,k) = y(i,j,k) + + + (x(i-1,j-1,k) + + + x(i,j-1,k-1) + + + x(i,j+1,k-1) + + + x(i,j+1,k+1) + + + x(i+1,j,k+1)) + + + (x(i-1,j-1,k-1) + + + x(i+1,j-1,k-1) + + + x(i-1,j+1,k-1) + + + x(i+1,j+1,k-1) + + + x(i-1,j+1,k+1) + + + x(i+1,j+1,k+1)) + enddo + enddo + enddo + return + end diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c index 63911b3dbe5..94245a4678b 100644 --- a/gcc/tree-predcom.c +++ b/gcc/tree-predcom.c @@ -1707,7 +1707,7 @@ remove_stmt (gimple stmt) remove_phi_node (&psi, true); if (!next - || !gimple_assign_copy_p (next) + || !gimple_assign_ssa_name_copy_p (next) || gimple_assign_rhs1 (next) != name) return; @@ -1727,9 +1727,10 @@ remove_stmt (gimple stmt) mark_virtual_ops_for_renaming (stmt); gsi_remove (&bsi, true); + release_defs (stmt); if (!next - || !gimple_assign_copy_p (next) + || !gimple_assign_ssa_name_copy_p (next) || gimple_assign_rhs1 (next) != name) return;