re PR tree-optimization/77352 (ICE: verify_ssa failed)
authorJakub Jelinek <jakub@redhat.com>
Wed, 31 Aug 2016 18:42:55 +0000 (20:42 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 31 Aug 2016 18:42:55 +0000 (20:42 +0200)
PR fortran/77352
* trans-openmp.c (gfc_trans_omp_parallel_workshare): Always add a
BIND_EXPR with BLOCK around what gfc_trans_omp_workshare returns.

* gfortran.dg/gomp/pr77352.f90: New test.

From-SVN: r239904

gcc/fortran/ChangeLog
gcc/fortran/trans-openmp.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/gomp/pr77352.f90 [new file with mode: 0644]

index d7f416128abacd0849e3ad77f97d27de39e5794c..9913c97de04c407a092dcdaa5f6a5a684f3d367d 100644 (file)
@@ -1,5 +1,9 @@
 2016-08-31  Jakub Jelinek  <jakub@redhat.com>
 
+       PR fortran/77352
+       * trans-openmp.c (gfc_trans_omp_parallel_workshare): Always add a
+       BIND_EXPR with BLOCK around what gfc_trans_omp_workshare returns.
+
        PR fortran/77374
        * parse.c (parse_omp_oacc_atomic): Copy over cp->ext.omp_atomic
        to cp->block->ext.omp_atomic.
index 3f5db9658225d6396f110880df065ec2e9d15930..c0d676178712343601689efdb15ecf43d2816bda 100644 (file)
@@ -4001,10 +4001,7 @@ gfc_trans_omp_parallel_workshare (gfc_code *code)
                                       code->loc);
   pushlevel ();
   stmt = gfc_trans_omp_workshare (code, &workshare_clauses);
-  if (TREE_CODE (stmt) != BIND_EXPR)
-    stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
-  else
-    poplevel (0, 0);
+  stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
   stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt,
                     omp_clauses);
   OMP_PARALLEL_COMBINED (stmt) = 1;
index d77d548481f95f5318ddc826ed0aa315c56c7d75..864215d9dc4fba3a10a02bdf6a290a306297c273 100644 (file)
@@ -1,5 +1,8 @@
 2016-08-31  Jakub Jelinek  <jakub@redhat.com>
 
+       PR fortran/77352
+       * gfortran.dg/gomp/pr77352.f90: New test.
+
        PR fortran/77374
        * gfortran.dg/gomp/pr77374.f08: New test.
 
diff --git a/gcc/testsuite/gfortran.dg/gomp/pr77352.f90 b/gcc/testsuite/gfortran.dg/gomp/pr77352.f90
new file mode 100644 (file)
index 0000000..74ddecd
--- /dev/null
@@ -0,0 +1,16 @@
+! PR fortran/77352
+! { dg-do compile }
+! { dg-additional-options "-fstack-arrays -O2" }
+! { dg-additional-options "-fopenacc" { target fopenacc } }
+
+program pr77352
+  real, allocatable :: a(:,:), b(:)
+  integer :: m, n
+  m = 4
+  n = 2
+  allocate (a(m,n), b(m))
+  a = 1.0
+!$omp parallel workshare
+  b(:) = [ sum(a, dim=1) ]
+!$omp end parallel workshare
+end