This patch is a bug fix for commit
gcc-17-202-g3f8c7483112, 'OpenMP:
Expand "declare mapper" mappers for target {enter,exit,} data
directives'. The ChangeLog for that patch indicated that
cxx_omp_map_array_section was supposed to accept both arrays and
pointers as the base expression, but the code actually only allowed
pointers. OTOH, both the error-checking in handle_omp_array_sections_1
and the code generation in build_array_ref allow ARRAY_TYPE, and code with
such expressions is actually coming in to the function.
There is no test case included with this patch, but I ran across this
in the two new test cases included with the OpenMP iterators patch
https://gcc.gnu.org/pipermail/gcc-patches/2025-July/689071.html which
I am preparing to resubmit.
gcc/cp/ChangeLog
* semantics.cc (cxx_omp_map_array_section): Allow ARRAY_TYPE
expressions, not just pointers.
if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
t = convert_from_reference (t);
- if (TYPE_PTR_P (TREE_TYPE (t)))
+ if (TYPE_PTR_P (TREE_TYPE (t))
+ || TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
t = build_array_ref (loc, t, low);
else
+ /* handle_omp_array_sections_1 has already diagnosed the error. */
t = error_mark_node;
}