re PR fortran/71014 (associate statement inside omp parallel do appears to disable...
authorJakub Jelinek <jakub@redhat.com>
Fri, 19 Aug 2016 15:30:33 +0000 (17:30 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 19 Aug 2016 15:30:33 +0000 (17:30 +0200)
PR fortran/71014
* resolve.c (gfc_resolve): For ns->construct_entities don't save, clear
and restore omp state around the resolving.

* testsuite/libgomp.fortran/pr71014.f90: New test.

From-SVN: r239620

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.fortran/pr71014.f90 [new file with mode: 0644]

index 11767cdb297b833610e12db555a67395e677a982..23386cce487ab3fa9b89b6aa7171b6413421397a 100644 (file)
@@ -1,5 +1,9 @@
 2016-08-19  Jakub Jelinek  <jakub@redhat.com>
 
+       PR fortran/71014
+       * resolve.c (gfc_resolve): For ns->construct_entities don't save, clear
+       and restore omp state around the resolving.
+
        PR fortran/69281
        * trans-openmp.c (gfc_trans_omp_parallel, gfc_trans_omp_task,
        gfc_trans_omp_target): Wrap gfc_trans_omp_code result in an extra
index 7763f9c734501ab7a63f25bcdcf2d72a67956359..b7036a82837a328d01a9230d967044383a312adb 100644 (file)
@@ -15587,7 +15587,8 @@ gfc_resolve (gfc_namespace *ns)
   /* As gfc_resolve can be called during resolution of an OpenMP construct
      body, we should clear any state associated to it, so that say NS's
      DO loops are not interpreted as OpenMP loops.  */
-  gfc_omp_save_and_clear_state (&old_omp_state);
+  if (!ns->construct_entities)
+    gfc_omp_save_and_clear_state (&old_omp_state);
 
   resolve_types (ns);
   component_assignment_level = 0;
@@ -15599,5 +15600,6 @@ gfc_resolve (gfc_namespace *ns)
 
   gfc_run_passes (ns);
 
-  gfc_omp_restore_state (&old_omp_state);
+  if (!ns->construct_entities)
+    gfc_omp_restore_state (&old_omp_state);
 }
index 5849aca7e50bcfecedb08539c979a30833548923..32b11ec067f8de919dd8b2813faff7a442e702f4 100644 (file)
@@ -1,3 +1,8 @@
+2016-08-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/71014
+       * testsuite/libgomp.fortran/pr71014.f90: New test.
+
 2016-08-18  Chung-Lin Tang  <cltang@codesourcery.com>
 
        PR middle-end/70895
diff --git a/libgomp/testsuite/libgomp.fortran/pr71014.f90 b/libgomp/testsuite/libgomp.fortran/pr71014.f90
new file mode 100644 (file)
index 0000000..6d0d6be
--- /dev/null
@@ -0,0 +1,20 @@
+! PR fortran/71014
+! { dg-do run }
+! { dg-additional-options "-O0" }
+
+program pr71014
+  implicit none
+  integer :: i, j
+  integer, parameter :: t = 100*101/2
+  integer :: s(16)
+  s(:) = 0
+!$omp parallel do
+  do j = 1, 16
+    associate (k => j)
+      do i = 1, 100
+        s(j) = s(j) + i
+      end do
+    end associate
+  end do
+  if (any(s /= t)) call abort
+end program pr71014