Hi Julian! On 2019-12-17T22:03:47-0800, Julian Brown <jul...@codesourcery.com> wrote: > This part contains the libgomp runtime support for the GOMP_MAP_ATTACH and > GOMP_MAP_DETACH mapping kinds (etc.), as introduced by the front-end > patches following in this series.
> --- a/libgomp/target.c > +++ b/libgomp/target.c > @@ -540,6 +540,7 @@ gomp_map_vars_existing (struct gomp_device_descr *devicep, > tgt_var->key = oldn; > tgt_var->copy_from = GOMP_MAP_COPY_FROM_P (kind); > tgt_var->always_copy_from = GOMP_MAP_ALWAYS_FROM_P (kind); > + tgt_var->do_detach = kind == GOMP_MAP_ATTACH; > tgt_var->offset = newn->host_start - oldn->host_start; > tgt_var->length = newn->host_end - newn->host_start; > For 'kind == GOMP_MAP_ATTACH', this function 'gomp_map_vars_existing' is actually unreachable. > @@ -978,8 +979,15 @@ gomp_map_vars_internal (struct gomp_device_descr > *devicep, > has_firstprivate = true; > continue; > } > + else if ((kind & typemask) == GOMP_MAP_ATTACH) > + { > + tgt->list[i].key = NULL; > + has_firstprivate = true; > + continue; > + } Given this, the following condition also is always-false: > cur_node.host_start = (uintptr_t) hostaddrs[i]; > - if (!GOMP_MAP_POINTER_P (kind & typemask)) > + if (!GOMP_MAP_POINTER_P (kind & typemask) > + && (kind & typemask) != GOMP_MAP_ATTACH) > cur_node.host_end = cur_node.host_start + sizes[i]; > else > cur_node.host_end = cur_node.host_start + sizeof (void *); Thus pushed "Mark up unreachable OpenACC 'attach' code path" to master branch in commit aff43ac0aed5185884724adbdfd4dbbabd87637c, and releases/gcc-10 branch in commit 4b185ee144d0c53ea7f08d4edaa8b578739498be, see attached. Grüße Thomas ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter
>From aff43ac0aed5185884724adbdfd4dbbabd87637c Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tho...@codesourcery.com> Date: Fri, 26 Jun 2020 10:19:14 +0200 Subject: [PATCH] Mark up unreachable OpenACC 'attach' code path ... introduced in commit 8e7e71ff247fb116dc381c5ef0c09acc0d2b374f (r279625) "OpenACC 2.6 deep copy: libgomp parts". libgomp/ * target.c (gomp_map_vars_existing): Assert 'kind != GOMP_MAP_ATTACH'. (gomp_map_vars_internal): Clean up. --- libgomp/target.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libgomp/target.c b/libgomp/target.c index 36425477dcb0..d4a4a408b400 100644 --- a/libgomp/target.c +++ b/libgomp/target.c @@ -357,10 +357,12 @@ gomp_map_vars_existing (struct gomp_device_descr *devicep, splay_tree_key newn, struct target_var_desc *tgt_var, unsigned char kind, struct gomp_coalesce_buf *cbuf) { + assert (kind != GOMP_MAP_ATTACH); + tgt_var->key = oldn; tgt_var->copy_from = GOMP_MAP_COPY_FROM_P (kind); tgt_var->always_copy_from = GOMP_MAP_ALWAYS_FROM_P (kind); - tgt_var->do_detach = kind == GOMP_MAP_ATTACH; + tgt_var->do_detach = false; tgt_var->offset = newn->host_start - oldn->host_start; tgt_var->length = newn->host_end - newn->host_start; @@ -815,8 +817,7 @@ gomp_map_vars_internal (struct gomp_device_descr *devicep, continue; } cur_node.host_start = (uintptr_t) hostaddrs[i]; - if (!GOMP_MAP_POINTER_P (kind & typemask) - && (kind & typemask) != GOMP_MAP_ATTACH) + if (!GOMP_MAP_POINTER_P (kind & typemask)) cur_node.host_end = cur_node.host_start + sizes[i]; else cur_node.host_end = cur_node.host_start + sizeof (void *); -- 2.27.0
>From 4b185ee144d0c53ea7f08d4edaa8b578739498be Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tho...@codesourcery.com> Date: Fri, 26 Jun 2020 10:19:14 +0200 Subject: [PATCH] Mark up unreachable OpenACC 'attach' code path ... introduced in commit 8e7e71ff247fb116dc381c5ef0c09acc0d2b374f (r279625) "OpenACC 2.6 deep copy: libgomp parts". libgomp/ * target.c (gomp_map_vars_existing): Assert 'kind != GOMP_MAP_ATTACH'. (gomp_map_vars_internal): Clean up. (cherry picked from commit aff43ac0aed5185884724adbdfd4dbbabd87637c) --- libgomp/target.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libgomp/target.c b/libgomp/target.c index 36425477dcb0..d4a4a408b400 100644 --- a/libgomp/target.c +++ b/libgomp/target.c @@ -357,10 +357,12 @@ gomp_map_vars_existing (struct gomp_device_descr *devicep, splay_tree_key newn, struct target_var_desc *tgt_var, unsigned char kind, struct gomp_coalesce_buf *cbuf) { + assert (kind != GOMP_MAP_ATTACH); + tgt_var->key = oldn; tgt_var->copy_from = GOMP_MAP_COPY_FROM_P (kind); tgt_var->always_copy_from = GOMP_MAP_ALWAYS_FROM_P (kind); - tgt_var->do_detach = kind == GOMP_MAP_ATTACH; + tgt_var->do_detach = false; tgt_var->offset = newn->host_start - oldn->host_start; tgt_var->length = newn->host_end - newn->host_start; @@ -815,8 +817,7 @@ gomp_map_vars_internal (struct gomp_device_descr *devicep, continue; } cur_node.host_start = (uintptr_t) hostaddrs[i]; - if (!GOMP_MAP_POINTER_P (kind & typemask) - && (kind & typemask) != GOMP_MAP_ATTACH) + if (!GOMP_MAP_POINTER_P (kind & typemask)) cur_node.host_end = cur_node.host_start + sizes[i]; else cur_node.host_end = cur_node.host_start + sizeof (void *); -- 2.27.0