OSDN Git Service

PR debug/43670
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Apr 2010 09:16:28 +0000 (09:16 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Apr 2010 09:16:28 +0000 (09:16 +0000)
* cfgexpand.c (expand_debug_expr): If for non-NULL offset
op0 is not a MEM, just return NULL instead of assertion
failure.
(discover_nonconstant_array_refs): Don't walk debug stmts.

* gcc.dg/pr43670.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158108 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cfgexpand.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr43670.c [new file with mode: 0644]

index 4eae83a..7e08006 100644 (file)
@@ -1,3 +1,11 @@
+2010-04-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/43670
+       * cfgexpand.c (expand_debug_expr): If for non-NULL offset
+       op0 is not a MEM, just return NULL instead of assertion
+       failure.
+       (discover_nonconstant_array_refs): Don't walk debug stmts.
+
 2010-04-08  Doug Kwan  <dougkwan@google.com>
 
        * configure.ac: Recognize gold and do not use its version number
index eeb5c73..bff4897 100644 (file)
@@ -2502,7 +2502,8 @@ expand_debug_expr (tree exp)
          {
            enum machine_mode addrmode, offmode;
 
-           gcc_assert (MEM_P (op0));
+           if (!MEM_P (op0))
+             return NULL;
 
            op0 = XEXP (op0, 0);
            addrmode = GET_MODE (op0);
@@ -3623,7 +3624,8 @@ discover_nonconstant_array_refs (void)
     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
       {
        gimple stmt = gsi_stmt (gsi);
-       walk_gimple_op (stmt, discover_nonconstant_array_refs_r, NULL);
+       if (!is_gimple_debug (stmt))
+         walk_gimple_op (stmt, discover_nonconstant_array_refs_r, NULL);
       }
 }
 
index 30ee707..39fb6f0 100644 (file)
@@ -1,3 +1,8 @@
+2010-04-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/43670
+       * gcc.dg/pr43670.c: New test.
+
 2010-04-08  Maxim Kuvyrkov  <maxim@codesourcery.com>
 
        PR middle-end/40815
diff --git a/gcc/testsuite/gcc.dg/pr43670.c b/gcc/testsuite/gcc.dg/pr43670.c
new file mode 100644 (file)
index 0000000..f152b4d
--- /dev/null
@@ -0,0 +1,29 @@
+/* PR debug/43670 */
+/* { dg-do compile } */
+/* { dg-options "-O -ftree-vrp -fcompare-debug" } */
+
+extern void abort (void);
+
+typedef struct { double T1; } S;
+
+void
+foo (void)
+{
+  int i, j;
+  double s;
+
+  S y[2][2];
+  S *x[2] = { y[0], y[1] };
+  S **p = x;
+
+  for (i = 0; i < 2; i++)
+    for (j = 0; j < 2; j++)
+      p[j][i].T1 = 1;
+
+  for (i = 0; i < 2; i++)
+    for (j = 0; j < 2; j++)
+      s = p[j][i].T1;
+
+  if (s != 1)
+    abort ();
+}