public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [gomp3] Assumed-size arrays are now predetermined to have actual argument's sharing
@ 2008-02-26 14:38 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2008-02-26 14:38 UTC (permalink / raw)
  To: gcc-patches; +Cc: fortran

Hi!

OpenMP 3.0 unlike 2.5 says that assumed-size arrays are predetermined
to share the sharing status with corresponding actual argument (which for
gcc is predetermined shared).  Assumed-size arrays are still allowed
to be in shared() clauses, and keep being disallowed in private/firstprivate
etc.

Committed to gomp-3_0-branch.

2008-02-26  Jakub Jelinek  <jakub@redhat.com>

	* trans-openmp.c (gfc_omp_predetermined_sharing): Return
	OMP_CLAUSE_DEFAULT_SHARED for assumed-size arrays.

	* gfortran.dg/gomp/sharing-3.f90: New test.

--- gcc/fortran/trans-openmp.c	(revision 132481)
+++ gcc/fortran/trans-openmp.c	(working copy)
@@ -84,6 +84,17 @@ gfc_omp_predetermined_sharing (tree decl
   if (GFC_DECL_CRAY_POINTEE (decl))
     return OMP_CLAUSE_DEFAULT_PRIVATE;
 
+  /* Assumed-size arrays are predetermined to inherit sharing
+     attributes of the associated actual argument, which is shared
+     for all we care.  */
+  if (TREE_CODE (decl) == PARM_DECL
+      && GFC_ARRAY_TYPE_P (TREE_TYPE (decl))
+      && GFC_TYPE_ARRAY_AKIND (TREE_TYPE (decl)) == GFC_ARRAY_UNKNOWN
+      && GFC_TYPE_ARRAY_UBOUND (TREE_TYPE (decl),
+				GFC_TYPE_ARRAY_RANK (TREE_TYPE (decl)) - 1)
+	 == NULL)
+    return OMP_CLAUSE_DEFAULT_SHARED;
+
   /* COMMON and EQUIVALENCE decls are shared.  They
      are only referenced through DECL_VALUE_EXPR of the variables
      contained in them.  If those are privatized, they will not be
--- gcc/testsuite/gfortran.dg/gomp/sharing-3.f90	(revision 0)
+++ gcc/testsuite/gfortran.dg/gomp/sharing-3.f90	(revision 0)
@@ -0,0 +1,37 @@
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+subroutine foo (vara, varb, varc, vard, n)
+  integer :: n, vara(n), varb(*), varc(:), vard(6), vare(6)
+  vare(:) = 0
+  !$omp parallel default(none) shared(vara, varb, varc, vard, vare)
+    !$omp master   
+      vara(1) = 1
+      varb(1) = 1
+      varc(1) = 1
+      vard(1) = 1
+      vare(1) = 1
+    !$omp end master
+  !$omp end parallel
+  !$omp parallel default(none) private(vara, varc, vard, vare)
+    vara(1) = 1
+    varc(1) = 1
+    vard(1) = 1
+    vare(1) = 1
+  !$omp end parallel
+  !$omp parallel default(none) firstprivate(vara, varc, vard, vare)
+    vara(1) = 1
+    varc(1) = 1
+    vard(1) = 1
+    vare(1) = 1
+  !$omp end parallel
+  !$omp parallel default(none)	! { dg-error "enclosing parallel" }
+    !$omp master
+      vara(1) = 1		! { dg-error "not specified" }
+      varb(1) = 1		! Assumed-size is predetermined
+      varc(1) = 1		! { dg-error "not specified" "" { xfail *-*-* } }
+      vard(1) = 1		! { dg-error "not specified" }
+      vare(1) = 1		! { dg-error "not specified" }
+    !$omp end master
+  !$omp end parallel
+end subroutine foo

	Jakub

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-02-26 13:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-02-26 14:38 [gomp3] Assumed-size arrays are now predetermined to have actual argument's sharing Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).