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
This commit is contained in:
Jakub Jelinek 2014-10-10 13:08:37 +02:00 committed by Jakub Jelinek
parent 81231d139c
commit 18cda88d87
5 changed files with 51 additions and 0 deletions

View file

@ -1,3 +1,9 @@
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.

View file

@ -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;
}

View file

@ -1,3 +1,9 @@
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

View file

@ -0,0 +1,13 @@
! 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

View file

@ -0,0 +1,16 @@
! 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