https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113867

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |burnus at gcc dot 
gnu.org
          Component|middle-end                  |libgomp

--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> ---
The problem here is in libgomp's gomp_map_vars_internal:

                /* Fallthrough.  */
              case GOMP_MAP_STRUCT:
                first = i + 1;
                last = i + sizes[i];
                cur_node.host_start = (uintptr_t) hostaddrs[i];
                cur_node.host_end = (uintptr_t) hostaddrs[last]
                                    + sizes[last];
                if (tgt->list[first].key != NULL)
                  continue;
                if (sizes[last] == 0)
                  cur_node.host_end++;
                n = splay_tree_lookup (mem_map, &cur_node);
                if (sizes[last] == 0)
                  cur_node.host_end--;
                if (n == NULL && cur_node.host_start == cur_node.host_end)
                  {
                    gomp_mutex_unlock (&devicep->lock);
                    gomp_fatal ("Struct pointer member not mapped (%p)",
                                (void*) hostaddrs[first]);
                  }
                if (n == NULL)
...
                    field_tgt_base = (uintptr_t) hostaddrs[first];
...
                    field_tgt_clear = last;

here: n == NULL and cur_node.host_end - cur_node.host_start = 8 [i.e.
sizeof(void*)?!]:

For i=1, there is no action to be taken due to the
GOMP_MAP_ZERO_LEN_ARRAY_SECTION.

And for i=2,

                if (field_tgt_clear != FIELD_TGT_EMPTY)
                  {
                    k->tgt_offset = k->host_start - field_tgt_base
                                    + field_tgt_offset;

Here, k->tgt_offset = hostaddr of the struct but we are no longer mapping a
struct here. - Clearly, resetting was forgotten ...

Reply via email to