From: Tobias Burnus Date: Tue, 16 Jun 2020 18:17:20 +0000 (+0200) Subject: OpenMP/Fortran: Permit impure ELEMENTAL in omp directives X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=244ed2adaa3d349d381ca6ce090c2fa69b6e8d8b;p=gcc.git OpenMP/Fortran: Permit impure ELEMENTAL in omp directives OpenMP since 4.5 permits IMPURE ELEMENTAL in directives and the code already only checked for PURE. – Followup for -fopenmp-simd. gcc/fortran/ChangeLog: * parse.c (decode_omp_directive): Remove "or ELEMENTAL" from "in PURE" error message also for -fopenmp-simd. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/pr79154-simd.f90: New test. --- diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 9d90e501bf6..46e1e1b2698 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -1078,8 +1078,7 @@ decode_omp_directive (void) if (!flag_openmp && gfc_pure (NULL)) { gfc_error_now ("OpenMP directives other than SIMD or DECLARE TARGET " - "at %C may not appear in PURE or ELEMENTAL " - "procedures"); + "at %C may not appear in PURE procedures"); reject_statement (); gfc_error_recovery (); return ST_NONE; diff --git a/gcc/testsuite/gfortran.dg/gomp/pr79154-simd.f90 b/gcc/testsuite/gfortran.dg/gomp/pr79154-simd.f90 new file mode 100644 index 00000000000..d6b72d6f3da --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/pr79154-simd.f90 @@ -0,0 +1,16 @@ +! { dg-options "-fno-openmp -fopenmp-simd" } +! +pure subroutine bar(a) + integer, intent(in) :: a(:) + !$omp target enter data map(to:a) ! Ignored with -fopenmp-simd otherwise invalid in PURE +end + +pure subroutine foo(a,b) + integer, intent(out) :: a(5) + integer, intent(in) :: b(5) + !$omp target teams distribute simd ! { dg-error "may not appear in PURE procedures" } + do i=1, 5 + a(i) = b(i) + end do + !$omp end target teams distribute +end subroutine