re PR middle-end/57103 (ICE: verify_gimple failed: location references block not...
authorRichard Biener <rguenther@suse.de>
Mon, 29 Apr 2013 14:12:54 +0000 (14:12 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 29 Apr 2013 14:12:54 +0000 (14:12 +0000)
2013-04-29  Richard Biener  <rguenther@suse.de>

PR middle-end/57103
* tree-cfg.c (move_stmt_op): Fix condition under which to update
TREE_BLOCK.
(move_stmt_r): Remove redundant checking.

* gcc.dg/autopar/pr57103.c: New testcase.

From-SVN: r198418

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/autopar/pr57103.c [new file with mode: 0644]
gcc/tree-cfg.c

index 1529dd37f14ada3b10694c9cea4a847698ef85bc..b84161bf16395620d4e9104e0b769fcc44d43b8b 100644 (file)
@@ -1,3 +1,10 @@
+2013-04-29  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/57103
+       * tree-cfg.c (move_stmt_op): Fix condition under which to update
+       TREE_BLOCK.
+       (move_stmt_r): Remove redundant checking.
+
 2013-04-29  Teresa Johnson  <tejohnson@google.com>
 
        PR bootstrap/57077
index ea304a018272f8168368a820be4d4056cb8860a1..166d4e028ce9cc63374f9f8d021266ee653bec7b 100644 (file)
@@ -1,3 +1,8 @@
+2013-04-29  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/57103
+       * gcc.dg/autopar/pr57103.c: New testcase.
+
 2013-04-29  Senthil Kumar Selvaraj  <senthil_kumar.selvaraj@atmel.com>
 
        * gcc.dg/c1x-align-3.c: Add test for negative power of 2.
diff --git a/gcc/testsuite/gcc.dg/autopar/pr57103.c b/gcc/testsuite/gcc.dg/autopar/pr57103.c
new file mode 100644 (file)
index 0000000..fa70676
--- /dev/null
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O -ftree-parallelize-loops=4" } */
+
+int d[1024];
+
+static inline int foo (void)
+{
+  int s = 0;
+  int i = 0;
+  for (; i < 1024; i++)
+    s += d[i];
+  return s;
+}
+
+void bar (void)
+{
+  if (foo ())
+    __builtin_abort ();
+}
index a8e9f5cbab62a70d57f42b91df535ab528f5d43c..9b00248ece6ef6ff6e0dada79f7a4aee8cb47547 100644 (file)
@@ -6153,10 +6153,19 @@ move_stmt_op (tree *tp, int *walk_subtrees, void *data)
 
   if (EXPR_P (t))
     {
-      if (TREE_BLOCK (t) == p->orig_block
+      tree block = TREE_BLOCK (t);
+      if (block == p->orig_block
          || (p->orig_block == NULL_TREE
-         && TREE_BLOCK (t) == NULL_TREE))
+             && block != NULL_TREE))
        TREE_SET_BLOCK (t, p->new_block);
+#ifdef ENABLE_CHECKING
+      else if (block != NULL_TREE)
+       {
+         while (block && TREE_CODE (block) == BLOCK && block != p->orig_block)
+           block = BLOCK_SUPERCONTEXT (block);
+         gcc_assert (block == p->orig_block);
+       }
+#endif
     }
   else if (DECL_P (t) || TREE_CODE (t) == SSA_NAME)
     {
@@ -6241,18 +6250,10 @@ move_stmt_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p,
   gimple stmt = gsi_stmt (*gsi_p);
   tree block = gimple_block (stmt);
 
-  if (p->orig_block == NULL_TREE
-      || block == p->orig_block
-      || block == NULL_TREE)
+  if (block == p->orig_block
+      || (p->orig_block == NULL_TREE
+         && block != NULL_TREE))
     gimple_set_block (stmt, p->new_block);
-#ifdef ENABLE_CHECKING
-  else if (block != p->new_block)
-    {
-      while (block && block != p->orig_block)
-       block = BLOCK_SUPERCONTEXT (block);
-      gcc_assert (block);
-    }
-#endif
 
   switch (gimple_code (stmt))
     {
@@ -6486,14 +6487,6 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb,
          e->goto_locus = d->new_block ?
              COMBINE_LOCATION_DATA (line_table, e->goto_locus, d->new_block) :
              LOCATION_LOCUS (e->goto_locus);
-#ifdef ENABLE_CHECKING
-       else if (block != d->new_block)
-         {
-           while (block && block != d->orig_block)
-             block = BLOCK_SUPERCONTEXT (block);
-           gcc_assert (block);
-         }
-#endif
       }
 }