Hi Julian! On 2019-12-17T22:02:27-0800, Julian Brown <jul...@codesourcery.com> wrote: > --- a/libgomp/oacc-mem.c > +++ b/libgomp/oacc-mem.c
(Unhelpful diff trimmed.) > +/* Some types of (pointer) variables use several consecutive mappings, which > + must be treated as a group for enter/exit data directives. This function > + returns the last mapping in such a group (inclusive), or POS for singleton > + mappings. */ > +static int > +find_group_last (int pos, size_t mapnum, unsigned short *kinds) > { > + unsigned char kind0 = kinds[pos] & 0xff; > + int first_pos = pos, last_pos = pos; > + if (kind0 == GOMP_MAP_TO_PSET) > { > + while (pos + 1 < mapnum && (kinds[pos + 1] & 0xff) == GOMP_MAP_POINTER) > + last_pos = ++pos; > + /* We expect at least one GOMP_MAP_POINTER after a GOMP_MAP_TO_PSET. > */ > + assert (last_pos > first_pos); > + } > + else > + { > + /* GOMP_MAP_ALWAYS_POINTER can only appear directly after some other > + mapping. */ > + if (pos + 1 < mapnum > + && (kinds[pos + 1] & 0xff) == GOMP_MAP_ALWAYS_POINTER) > + return pos + 1; What is the case that a 'GOMP_MAP_ALWAYS_POINTER' would be generated for OpenACC code? Putting an 'assert' here, it never triggers, given the current set of libgomp test cases. If there is such a case, we should add a test case, otherwise, I suggest we do put an 'assert' here (whilst leaving in the supposedly correct code, if you'd like), to document that this not currently expected, and thus not tested? > + > + /* We can have one or several GOMP_MAP_POINTER mappings after a to/from > + (etc.) mapping. */ > + while (pos + 1 < mapnum && (kinds[pos + 1] & 0xff) == GOMP_MAP_POINTER) > + last_pos = ++pos; > } > + return last_pos; > } 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