re PR middle-end/53992 (Combining -fopenmp and -fgnu-tm results in segfault or misbeh...
authorPatrick Marlier <patrick.marlier@gmail.com>
Mon, 20 Aug 2012 16:22:17 +0000 (16:22 +0000)
committerPatrick Marlier <pmarlier@gcc.gnu.org>
Mon, 20 Aug 2012 16:22:17 +0000 (16:22 +0000)
gcc/
2012-08-20  Patrick Marlier  <patrick.marlier@gmail.com>

PR middle-end/53992
* omp-low.c (lower_omp_1): Handle GIMPLE_TRANSACTION.

testsuite/
2012-08-20  Patrick Marlier  <patrick.marlier@gmail.com>

PR middle-end/53992
* gcc.dg/gomp/pr53992.c: New test.

From-SVN: r190536

gcc/ChangeLog
gcc/omp-low.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/gomp/pr53992.c [new file with mode: 0644]

index cfb31890b47eade1d1a539e8005d4476d8a7701b..a80dafe88dc02c7dc15e1a94b5359f221e89ad21 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-20  Patrick Marlier  <patrick.marlier@gmail.com>
+
+       PR middle-end/53992
+       * omp-low.c (lower_omp_1): Handle GIMPLE_TRANSACTION.
+
 2012-08-20  Richard Earnshaw  <rearnsha@arm.com>
 
        PR tree-ssa/54295
index 846840e2b679804816b75589c4b7d668e21413cf..adbd0345f9eec51de1e70f62b8d1c883fb75b52d 100644 (file)
@@ -6827,6 +6827,9 @@ lower_omp_1 (gimple_stmt_iterator *gsi_p, omp_context *ctx)
       lower_omp (gimple_try_eval_ptr (stmt), ctx);
       lower_omp (gimple_try_cleanup_ptr (stmt), ctx);
       break;
+    case GIMPLE_TRANSACTION:
+      lower_omp (gimple_transaction_body_ptr (stmt), ctx);
+      break;
     case GIMPLE_BIND:
       lower_omp (gimple_bind_body_ptr (stmt), ctx);
       break;
index f33149ae1b692253ace5979bd5852f22ee4fc674..3ff68d8de673ebda4687794bb99369543a5f50df 100644 (file)
@@ -1,3 +1,8 @@
+2012-08-20  Patrick Marlier  <patrick.marlier@gmail.com>
+
+       PR middle-end/53992
+       * gcc.dg/gomp/pr53992.c: New test.
+
 2012-08-20  Richard Earnshaw  <rearnsha@arm.com>
 
        PR tree-ssa/54295
diff --git a/gcc/testsuite/gcc.dg/gomp/pr53992.c b/gcc/testsuite/gcc.dg/gomp/pr53992.c
new file mode 100644 (file)
index 0000000..4d5af3c
--- /dev/null
@@ -0,0 +1,21 @@
+/* PR middle-end/53992 */
+/* { dg-do compile } */
+/* { dg-options "-fgnu-tm -fopenmp" } */
+/* { dg-require-effective-target fgnu_tm } */
+
+int main() {
+    long data[10000];
+    long i, min=10000;
+    for (i=0; i<10000; i++) data[i] = -i;
+            
+#pragma omp parallel for
+    for (i=0; i<10000; i++) {
+        __transaction_atomic
+        {
+            if (data[i] < min)
+                min = data[i];
+        }
+    }
+
+    return !(min == -9999);
+}