Hello This patch implements support for the OpenMP 5.1 'present' modifier in C, C++ and Fortran. 'present' can be used in the 'map' clause for the 'target', 'target data', 'target data enter' and 'target data exit' constructs, and the 'to'/'from' clauses of 'target update'. It can be used in conjunction with other modifiers too (currently only 'always' on map clauses). It can also be used in defaultmap, which applies 'present, alloc' to the default clauses. It behaves similarly to the OpenACC 'present' clause, and causes an fatal runtime error when the referenced data is not already present in device memory. Similarly to the OpenACC error message, the error is expressed in terms of the equivalent OpenMP function !omp_target_is_present. Regarding the representation of the map kind - the bit space is getting a bit crowded. I have made bit 7 (GOMP_MAP_FLAG_FORCE) into another special bit (GOMP_MAP_FLAG_SPECIAL_5), and redefined GOMP_MAP_FLAG_FORCE to be GOMP_MAP_FLAG_SPECIAL_5 with no other special flags set. The 'present' modifier is represented by setting GOMP_MAP_FLAG_SPECIAL_5 | GOMP_MAP_FLAG_SPECIAL_0 - this does not interfere with 'always' (GOMP_MAP_FLAG_SPECIAL_2) or 'implicit' (GOMP_MAP_FLAG_SPECIAL_3 | GOMP_MAP_FLAG_SPECIAL_4) which is used by clauses generated by defaultmap. During gimplification of defaultmap, the present defaultmap is represented by setting GOVD_MAP_FORCE_PRESENT (as that is presently only used in OpenACC and has a similar meaning). GOVD_MAP_ALLOC ONLY will be added, and this is eventually lowered to a GOMP_MAP_PRESENT_ALLOC map kind for the default clauses. Bootstrapped on x86-64, no regressions in GCC testsuite, libgomp tested with x86-64 (no offloading), AMD GCN and NVPTX offloading. This is too late for GCC 13 now, but will this be okay for GCC 14? Thanks Kwok