From: Tobias Burnus Date: Fri, 29 Jul 2022 10:39:35 +0000 (+0200) Subject: OpenMP/Fortran: Permit assumed-size arrays in uniform clause X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=547a6252e94837e143f13bd7f8dc5f38dd5acd1a;p=thirdparty%2Fgcc.git OpenMP/Fortran: Permit assumed-size arrays in uniform clause gcc/fortran/ChangeLog: * openmp.cc (resolve_omp_clauses): Permit assumed-size arrays in uniform clause. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/declare-simd-3.f90: New test. (cherry picked from commit a6afbe5e9528e9ec3f0426d9791bd28e6e584d82) --- diff --git a/gcc/fortran/ChangeLog.omp b/gcc/fortran/ChangeLog.omp index 5e1b91afa82e..9877be5ec41b 100644 --- a/gcc/fortran/ChangeLog.omp +++ b/gcc/fortran/ChangeLog.omp @@ -1,3 +1,11 @@ +2022-07-29 Tobias Burnus + + Backport from mainline: + 2022-07-29 Tobias Burnus + + * openmp.cc (resolve_omp_clauses): Permit assumed-size arrays + in uniform clause. + 2022-07-05 Tobias Burnus Backport from mainline: diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc index 264e6e6a2159..91af90c3f660 100644 --- a/gcc/fortran/openmp.cc +++ b/gcc/fortran/openmp.cc @@ -8169,7 +8169,8 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, || code->op == EXEC_OACC_PARALLEL || code->op == EXEC_OACC_SERIAL)) check_array_not_assumed (n->sym, n->where, name); - else if (n->sym->as && n->sym->as->type == AS_ASSUMED_SIZE) + else if (list != OMP_LIST_UNIFORM + && n->sym->as && n->sym->as->type == AS_ASSUMED_SIZE) gfc_error ("Assumed size array %qs in %s clause at %L", n->sym->name, name, &n->where); if (n->sym->attr.in_namelist && !is_reduction) diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index 89b5283cdbaa..808cc47c0e8b 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,10 @@ +2022-07-29 Tobias Burnus + + Backport from mainline: + 2022-07-29 Tobias Burnus + + * gfortran.dg/gomp/declare-simd-3.f90: New test. + 2022-07-29 Tobias Burnus Backport from mainline: diff --git a/gcc/testsuite/gfortran.dg/gomp/declare-simd-3.f90 b/gcc/testsuite/gfortran.dg/gomp/declare-simd-3.f90 new file mode 100644 index 000000000000..b94587ef35a1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/declare-simd-3.f90 @@ -0,0 +1,30 @@ +! { dg-do compile } + +module m + implicit none (type, external) +contains + real function add(x, y, j) result(res) + !$omp declare simd(add) uniform(x, y) linear(j : 1) simdlen(4) + integer, value :: j + real, intent(in) :: x(*), y(*) + res = x(j) + y(j) + end function +end module m + +program main + use m + implicit none (type, external) + real, allocatable :: A(:), B(:), C(:) + integer :: i, N + N = 128 + A = [(3*i, i = 1, N)] + B = [(7*i, i = 1, N)] + allocate (C(N)) + + !$omp simd + do i = 1, N + C(i) = add(A, B, i) + end do + + if (any (C /= [(10*i, i = 1, N)])) error stop +end program main