Fortran/OpenMP: Fix var-list expr parsing with array/dt gcc/fortran/ChangeLog: * openmp.c (gfc_match_omp_variable_list): Gobble whitespace before checking whether a '%' or '(' follows as next character. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/map-5.f90: New test. gcc/fortran/openmp.c | 1 + gcc/testsuite/gfortran.dg/gomp/map-5.f90 | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index a1b057227b7..7eeabff8e76 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -261,6 +261,7 @@ gfc_match_omp_variable_list (const char *str, gfc_omp_namelist **list, case MATCH_YES: gfc_expr *expr; expr = NULL; + gfc_gobble_whitespace (); if ((allow_sections && gfc_peek_ascii_char () == '(') || (allow_derived && gfc_peek_ascii_char () == '%')) { diff --git a/gcc/testsuite/gfortran.dg/gomp/map-5.f90 b/gcc/testsuite/gfortran.dg/gomp/map-5.f90 new file mode 100644 index 00000000000..2b4b341bc51 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/map-5.f90 @@ -0,0 +1,13 @@ +implicit none +type t + integer :: b(5) +end type t +integer :: a(5), x, y(5) +type(t) :: b +!$omp target enter data map( to: a (:) ) +!$omp target enter data map( to: b % b ) +!$omp target enter data map( to: a(:) ) +!$omp target depend(out: y (2)) nowait +!$omp end target + +end