Commit 18cda88d by Jakub Jelinek Committed by Jakub Jelinek

re PR fortran/59488 ([OpenMP] named constant in parallel construct leads to "not…

re PR fortran/59488 ([OpenMP] named constant in parallel construct leads to "not specified in enclosing parallel" error.)

	PR fortran/59488
	* trans-openmp.c (gfc_omp_predetermined_sharing): Return
	OMP_CLAUSE_DEFAULT_SHARED for parameters or vtables.

	* gfortran.dg/gomp/pr59488-1.f90: New test.
	* gfortran.dg/gomp/pr59488-2.f90: New test.

From-SVN: r216067
parent 81231d13
2014-10-10 Jakub Jelinek <jakub@redhat.com>
PR fortran/59488
* trans-openmp.c (gfc_omp_predetermined_sharing): Return
OMP_CLAUSE_DEFAULT_SHARED for parameters or vtables.
2014-10-10 Tobias Burnus <burnus@net-b.de>
* gfortran.h (gfc_set_implicit_none): Update prototype.
......
......@@ -135,6 +135,16 @@ gfc_omp_predetermined_sharing (tree decl)
if (GFC_DECL_RESULT (decl) && ! DECL_HAS_VALUE_EXPR_P (decl))
return OMP_CLAUSE_DEFAULT_SHARED;
/* These are either array or derived parameters, or vtables.
In the former cases, the OpenMP standard doesn't consider them to be
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 (TREE_CODE (decl) == VAR_DECL
&& TREE_READONLY (decl)
&& TREE_STATIC (decl))
return OMP_CLAUSE_DEFAULT_SHARED;
return OMP_CLAUSE_DEFAULT_UNSPECIFIED;
}
......
2014-10-10 Jakub Jelinek <jakub@redhat.com>
PR fortran/59488
* gfortran.dg/gomp/pr59488-1.f90: New test.
* gfortran.dg/gomp/pr59488-2.f90: New test.
2014-10-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/63476
......
! PR fortran/59488
! { dg-do compile }
! { dg-options "-fopenmp" }
implicit none
integer, parameter :: p(2) = (/ 11, 12 /)
integer :: r
!$omp parallel do default(none)
do r = 1, 2
print *, p(r)
end do
end
! PR fortran/59488
! { dg-do compile }
! { dg-options "-fopenmp" }
implicit none
type t
integer :: s1, s2, s3
end type
integer :: r
type(t), parameter :: u = t(1, 2, 3)
!$omp parallel do default(none)
do r = 1, 2
print *, u
end do
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment