re PR fortran/88463 (Rejects conforming source, OpenMP Parallel region Default(None...
authorJakub Jelinek <jakub@redhat.com>
Wed, 12 Dec 2018 22:49:35 +0000 (23:49 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 12 Dec 2018 22:49:35 +0000 (23:49 +0100)
PR fortran/88463
* trans-openmp.c (gfc_omp_predetermined_sharing): Handle TREE_READONLY
VAR_DECLs with DECL_EXTERNAL like those with TREE_STATIC.

* testsuite/libgomp.fortran/pr88463-1.f90: New test.
* testsuite/libgomp.fortran/pr88463-2.f90: New test.

From-SVN: r267069

gcc/fortran/ChangeLog
gcc/fortran/trans-openmp.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.fortran/pr88463-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/pr88463-2.f90 [new file with mode: 0644]

index 78fe19a..bb3da68 100644 (file)
@@ -1,3 +1,9 @@
+2018-12-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/88463
+       * trans-openmp.c (gfc_omp_predetermined_sharing): Handle TREE_READONLY
+       VAR_DECLs with DECL_EXTERNAL like those with TREE_STATIC.
+
 2018-12-11  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/88155
index bf3f469..37acef6 100644 (file)
@@ -149,7 +149,8 @@ gfc_omp_predetermined_sharing (tree decl)
      variables at all (they can't be redefined), but they can nevertheless appear
      in parallel/task regions and for default(none) purposes treat them as shared.
      For vtables likely the same handling is desirable.  */
-  if (VAR_P (decl) && TREE_READONLY (decl) && TREE_STATIC (decl))
+  if (VAR_P (decl) && TREE_READONLY (decl)
+      && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
     return OMP_CLAUSE_DEFAULT_SHARED;
 
   return OMP_CLAUSE_DEFAULT_UNSPECIFIED;
index b8f508f..c2740f3 100644 (file)
@@ -1,5 +1,9 @@
 2018-12-12  Jakub Jelinek  <jakub@redhat.com>
 
+       PR fortran/88463
+       * testsuite/libgomp.fortran/pr88463-1.f90: New test.
+       * testsuite/libgomp.fortran/pr88463-2.f90: New test.
+
        * testsuite/libgomp.c-c++-common/for-16.c: New test.
 
 2018-12-12  Andreas Schwab  <schwab@suse.de>
diff --git a/libgomp/testsuite/libgomp.fortran/pr88463-1.f90 b/libgomp/testsuite/libgomp.fortran/pr88463-1.f90
new file mode 100644 (file)
index 0000000..53a99ee
--- /dev/null
@@ -0,0 +1,19 @@
+! PR fortran/88463
+! { dg-do compile { target { ! *-*-* } } }
+
+module pr88463_1
+  integer, parameter :: c = 1
+  real, parameter :: d(4) = (/ 2, 3, 4, 5 /)
+end module pr88463_1
+
+program pr88463
+  use pr88463_1
+  use pr88463_2
+  integer :: i
+  real :: j(4)
+  !$omp parallel default(none) private (i, j)
+    i = a + b(1) + b(4) + c + d(1) + d(4)
+    j(1:4) = b(1:4)
+    j(1:4) = d(1:4)
+  !$omp end parallel
+end program pr88463
diff --git a/libgomp/testsuite/libgomp.fortran/pr88463-2.f90 b/libgomp/testsuite/libgomp.fortran/pr88463-2.f90
new file mode 100644 (file)
index 0000000..8b2b98d
--- /dev/null
@@ -0,0 +1,9 @@
+! PR fortran/88463
+! { dg-do link }
+! { dg-options "-fopenmp" }
+! { dg-additional-sources pr88463-1.f90 }
+
+module pr88463_2
+  integer, parameter :: a = 1
+  real, parameter :: b(4) = (/ 2., 3., 4., 5. /)
+end module pr88463_2