aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2020-09-15 09:24:47 +0200
committerTobias Burnus <tobias@codesourcery.com>2020-09-15 09:24:47 +0200
commit972da557463ec946a31577294764a186b9821012 (patch)
treed0ab3a41af83955eccee4b164c805262939e022d /include
parentf9d2def016410a2095df6b399097b482f82064a5 (diff)
downloadgcc-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.h3
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)