From: Sandra Loosemore Date: Thu, 28 May 2026 15:37:11 +0000 (+0000) Subject: C++, OpenMP: Handle ARRAY_TYPE array sections, not just pointers X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=12fc7c1ecd34c2e77a1ef6daefea8d16cd3106d0;p=thirdparty%2Fgcc.git C++, OpenMP: Handle ARRAY_TYPE array sections, not just pointers 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. --- diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index 565117fb8fa..42278d336bf 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -6950,9 +6950,11 @@ cxx_omp_map_array_section (location_t loc, tree t) 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; }