aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2009-12-07 14:42:10 -0800
committerRichard Henderson <rth@gcc.gnu.org>2009-12-07 14:42:10 -0800
commit74e12783a3dbd31f56a44678ad9af5a14f0bbf1a (patch)
treeef92971896306579f7a3026e1bfb42c3c9d31d32
parentaec4e50c21eced5ee903b7350b71170fa58262e4 (diff)
downloadgcc-74e12783a3dbd31f56a44678ad9af5a14f0bbf1a.zip
gcc-74e12783a3dbd31f56a44678ad9af5a14f0bbf1a.tar.gz
gcc-74e12783a3dbd31f56a44678ad9af5a14f0bbf1a.tar.bz2
re PR debug/42299 (another verify_ssa failure with -g -O2)
PR debug/42299 PR debug/42166 * tree-ssa.c (insert_debug_temp_for_var_def): Skip propagation for ssa names already registered for update. From-SVN: r155063
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr42299.c23
-rw-r--r--gcc/testsuite/gfortran.dg/pr42166.f9020
-rw-r--r--gcc/tree-ssa.c10
4 files changed, 57 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4056a35..a10b288 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2009-12-07 Richard Henderson <rth@redhat.com>
+
+ PR debug/42299
+ PR debug/42166
+ * tree-ssa.c (insert_debug_temp_for_var_def): Skip propagation
+ for ssa names already registered for update.
+
2009-12-07 Jakub Jelinek <jakub@redhat.com>
PR debug/42244
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr42299.c b/gcc/testsuite/gcc.c-torture/compile/pr42299.c
new file mode 100644
index 0000000..5a9199f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr42299.c
@@ -0,0 +1,23 @@
+/* { dg-options "-g" } */
+
+static int
+foo (int x, int y)
+{
+ if (y)
+ goto lab;
+ if (x)
+ y = 0;
+ if (y)
+ goto lab;
+ y = 0;
+lab:
+ return y;
+}
+
+void
+baz (int x, int y)
+{
+ y = foo (x, y);
+ if (y != 0)
+ bar ();
+}
diff --git a/gcc/testsuite/gfortran.dg/pr42166.f90 b/gcc/testsuite/gfortran.dg/pr42166.f90
new file mode 100644
index 0000000..5b97815
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr42166.f90
@@ -0,0 +1,20 @@
+! { dg-options "-O2 -g" }
+
+MODULE powell
+ INTEGER, PARAMETER :: dp=8
+CONTAINS
+ SUBROUTINE newuob (n, bmat, ndim, d, vlag, w, npt)
+ REAL(dp), DIMENSION(ndim, *), INTENT(inout) :: bmat
+ REAL(dp), DIMENSION(*), INTENT(inout) :: d, vlag, w
+ REAL(dp) :: sum
+ INTEGER, INTENT(in) :: npt
+ DO j=1,n
+ jp=npt+j
+ DO k=1,n
+ sum=sum+bmat(jp,k)*d(k)
+ END DO
+ vlag(jp)=sum
+ END DO
+ END SUBROUTINE newuob
+END MODULE powell
+
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index b5d60b3..9947e57 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -312,9 +312,13 @@ insert_debug_temp_for_var_def (gimple_stmt_iterator *gsi, tree var)
if (!MAY_HAVE_DEBUG_STMTS)
return;
- /* First of all, check whether there are debug stmts that reference
- this variable and, if there are, decide whether we should use a
- debug temp. */
+ /* If this name has already been registered for replacement, do nothing
+ as anything that uses this name isn't in SSA form. */
+ if (name_registered_for_update_p (var))
+ return;
+
+ /* Check whether there are debug stmts that reference this variable and,
+ if there are, decide whether we should use a debug temp. */
FOR_EACH_IMM_USE_FAST (use_p, imm_iter, var)
{
stmt = USE_STMT (use_p);