diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2020-09-15 09:24:47 +0200 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2020-09-15 09:24:47 +0200 |
commit | 972da557463ec946a31577294764a186b9821012 (patch) | |
tree | d0ab3a41af83955eccee4b164c805262939e022d /include | |
parent | f9d2def016410a2095df6b399097b482f82064a5 (diff) | |
download | gcc-972da557463ec946a31577294764a186b9821012.zip gcc-972da557463ec946a31577294764a186b9821012.tar.gz gcc-972da557463ec946a31577294764a186b9821012.tar.bz2 |
OpenMP/Fortran: Fix (re)mapping of allocatable/pointer arrays [PR96668]
gcc/cp/ChangeLog:
PR fortran/96668
* cp-gimplify.c (cxx_omp_finish_clause): Add bool openacc arg.
* cp-tree.h (cxx_omp_finish_clause): Likewise
* semantics.c (handle_omp_for_class_iterator): Update call.
gcc/fortran/ChangeLog:
PR fortran/96668
* trans.h (gfc_omp_finish_clause): Add bool openacc arg.
* trans-openmp.c (gfc_omp_finish_clause): Ditto. Use
GOMP_MAP_ALWAYS_POINTER with PSET for pointers.
(gfc_trans_omp_clauses): Like the latter and also if the always
modifier is used.
gcc/ChangeLog:
PR fortran/96668
* gimplify.c (gimplify_omp_for): Add 'bool openacc' argument;
update omp_finish_clause calls.
(gimplify_adjust_omp_clauses_1, gimplify_adjust_omp_clauses,
gimplify_expr, gimplify_omp_loop): Update omp_finish_clause
and/or gimplify_for calls.
* langhooks-def.h (lhd_omp_finish_clause): Add bool openacc arg.
* langhooks.c (lhd_omp_finish_clause): Likewise.
* langhooks.h (lhd_omp_finish_clause): Likewise.
* omp-low.c (scan_sharing_clauses): Keep GOMP_MAP_TO_PSET cause for
'declare target' vars.
include/ChangeLog:
PR fortran/96668
* gomp-constants.h (GOMP_MAP_ALWAYS_POINTER_P): Define.
libgomp/ChangeLog:
PR fortran/96668
* libgomp.h (struct target_var_desc): Add has_null_ptr_assoc member.
* target.c (gomp_map_vars_existing): Add always_to_flag flag.
(gomp_map_vars_existing): Update call to it.
(gomp_map_fields_existing): Likewise
(gomp_map_vars_internal): Update PSET handling such that if a nullptr is
now allocated or if GOMP_MAP_POINTER is used PSET is updated and pointer
remapped.
(GOMP_target_enter_exit_data): Hanlde GOMP_MAP_ALWAYS_POINTER like
GOMP_MAP_POINTER.
* testsuite/libgomp.fortran/map-alloc-ptr-1.f90: New test.
* testsuite/libgomp.fortran/map-alloc-ptr-2.f90: New test.
Diffstat (limited to 'include')
-rw-r--r-- | include/gomp-constants.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/gomp-constants.h b/include/gomp-constants.h index 16f2d13..309cbca 100644 --- a/include/gomp-constants.h +++ b/include/gomp-constants.h @@ -171,6 +171,9 @@ enum gomp_map_kind (!((X) & GOMP_MAP_FLAG_SPECIAL) \ && ((X) & GOMP_MAP_FLAG_FROM)) +#define GOMP_MAP_ALWAYS_POINTER_P(X) \ + ((X) == GOMP_MAP_ALWAYS_POINTER) + #define GOMP_MAP_POINTER_P(X) \ ((X) == GOMP_MAP_POINTER) |