diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2020-07-29 15:09:55 +0200 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2020-07-29 15:09:55 +0200 |
commit | d6cd139c1728fd37a2b6b2251029458cc2b7127e (patch) | |
tree | 0dd250e4a3c85bd87037a5b323cd3a3bca472a13 /gcc/fortran/openmp.c | |
parent | 9f6abd2db90151c8966d2d2718ab8c299abf1105 (diff) | |
download | gcc-d6cd139c1728fd37a2b6b2251029458cc2b7127e.zip gcc-d6cd139c1728fd37a2b6b2251029458cc2b7127e.tar.gz gcc-d6cd139c1728fd37a2b6b2251029458cc2b7127e.tar.bz2 |
OpenMP: Permit in Fortran omp target data without map
gcc/fortran/ChangeLog:
* openmp.c (resolve_omp_clauses): Permit 'omp target data' without
map if use_device_{addr,ptr} is present.
gcc/testsuite/ChangeLog:
* gfortran.dg/gomp/map-3.f90: New test.
* gfortran.dg/gomp/map-4.f90: New test.
Diffstat (limited to 'gcc/fortran/openmp.c')
-rw-r--r-- | gcc/fortran/openmp.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index 0fd9988..16f39a4 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -5330,17 +5330,23 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, if (omp_clauses->depend_source && code->op != EXEC_OMP_ORDERED) gfc_error ("SOURCE dependence type only allowed " "on ORDERED directive at %L", &code->loc); - if (!openacc && code && omp_clauses->lists[OMP_LIST_MAP] == NULL) + if (!openacc + && code + && omp_clauses->lists[OMP_LIST_MAP] == NULL + && omp_clauses->lists[OMP_LIST_USE_DEVICE_PTR] == NULL + && omp_clauses->lists[OMP_LIST_USE_DEVICE_ADDR] == NULL) { const char *p = NULL; switch (code->op) { - case EXEC_OMP_TARGET_DATA: p = "TARGET DATA"; break; case EXEC_OMP_TARGET_ENTER_DATA: p = "TARGET ENTER DATA"; break; case EXEC_OMP_TARGET_EXIT_DATA: p = "TARGET EXIT DATA"; break; default: break; } - if (p) + if (code->op == EXEC_OMP_TARGET_DATA) + gfc_error ("TARGET DATA must contain at least one MAP, USE_DEVICE_PTR, " + "or USE_DEVICE_ADDR clause at %L", &code->loc); + else if (p) gfc_error ("%s must contain at least one MAP clause at %L", p, &code->loc); } |