Add support to the Fortran parser for the new OpenMP syntax that allows a comma after the directive name and between clauses of declare variant. The C and C++ parsers already support this syntax so only a new test is added.
gcc/fortran/ChangeLog: * openmp.cc (gfc_match_omp_declare_variant): Match comma after directive name and between clauses. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/declare-variant-2.f90: Remove error test for a comma after the directive name. * c-c++-common/gomp/adjust-args-5.c: New test. * gfortran.dg/gomp/adjust-args-11.f90: New test. --- gcc/fortran/openmp.cc | 4 ++ .../c-c++-common/gomp/adjust-args-5.c | 21 +++++++++ .../gfortran.dg/gomp/adjust-args-11.f90 | 45 +++++++++++++++++++ .../gfortran.dg/gomp/declare-variant-2.f90 | 3 -- 4 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/gomp/adjust-args-5.c create mode 100644 gcc/testsuite/gfortran.dg/gomp/adjust-args-11.f90 diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc index 79c0f1b2e62..9d255558dc9 100644 --- a/gcc/fortran/openmp.cc +++ b/gcc/fortran/openmp.cc @@ -6595,6 +6595,10 @@ gfc_match_omp_declare_variant (void) for (;;) { + gfc_gobble_whitespace (); + gfc_match_char (','); + gfc_gobble_whitespace (); + enum clause { match, diff --git a/gcc/testsuite/c-c++-common/gomp/adjust-args-5.c b/gcc/testsuite/c-c++-common/gomp/adjust-args-5.c new file mode 100644 index 00000000000..863b77458e4 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/adjust-args-5.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ + +/* Check that the OpenMP 6 syntax with commas after the directive name and + between clauses is supported. */ + +int f (int a, void *b, float c[2]); + +#pragma omp declare variant (f), match (construct={dispatch}), adjust_args (nothing: a), adjust_args (need_device_ptr: b, c) +int f0 (int a, void *b, float c[2]); + +int test () { + int a; + void *b; + float c[2]; + struct {int a;} s; + + #pragma omp dispatch, novariants(0), nocontext(1) + s.a = f0 (a, b, c); + + return s.a; +} diff --git a/gcc/testsuite/gfortran.dg/gomp/adjust-args-11.f90 b/gcc/testsuite/gfortran.dg/gomp/adjust-args-11.f90 new file mode 100644 index 00000000000..3b26f1b0868 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/adjust-args-11.f90 @@ -0,0 +1,45 @@ +! { dg-do compile } + +! Check that the OpenMP 5.1 syntax with commas between clauses is supported. +! A comma after the directive name is introduced in 5.2, which is not supported +! yet. + +module main + use iso_c_binding, only: c_ptr + implicit none + + type :: struct + integer :: a + real :: b + end type + + interface + integer function f(a, b, c) + import c_ptr + integer, intent(in) :: a + type(c_ptr), intent(inout) :: b + type(c_ptr), intent(out) :: c(:) + end function + integer function f0(a, b, c) + import c_ptr + integer, intent(in) :: a + type(c_ptr), intent(inout) :: b + type(c_ptr), intent(out) :: c(:) + !$omp declare variant (f), match (construct={dispatch}), & + !$omp& adjust_args (nothing: a), adjust_args (need_device_ptr: b, c) + end function + end interface + +contains +subroutine test + integer :: a + type(c_ptr) :: b + type(c_ptr) :: c(2) + type(struct) :: s + + !!$omp dispatch, nocontext(.false.), novariants(.false.) ! Not supported yet + !$omp dispatch nocontext(.false.), novariants(.false.) + s%a = f0 (a, b, c) + +end subroutine +end module diff --git a/gcc/testsuite/gfortran.dg/gomp/declare-variant-2.f90 b/gcc/testsuite/gfortran.dg/gomp/declare-variant-2.f90 index 62d2cb96fac..beea713efba 100644 --- a/gcc/testsuite/gfortran.dg/gomp/declare-variant-2.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/declare-variant-2.f90 @@ -182,9 +182,6 @@ contains subroutine f74 () !$omp declare variant (f1) match(construct={requires}) ! { dg-warning "unknown selector 'requires' for context selector set 'construct' at .1." } end subroutine - subroutine f75 () - !$omp declare variant (f1),match(construct={parallel}) ! { dg-error "expected 'match' or 'adjust_args' at .1." } - end subroutine subroutine f76 () !$omp declare variant (f1) match(implementation={atomic_default_mem_order("relaxed")}) ! { dg-error "expected identifier at .1." } end subroutine -- 2.45.2