This is a consolidated, updated patch series after several review rounds.
The first version was:
https://gcc.gnu.org/pipermail/gcc-patches/2026-August/727571.html.
The differences relative to previous version are, for each patch, in a separate
ChangeLog section at the bottom.
Here is the approval status for each patch:
* Patch 1/3 — C++ + common machinery: mostly approved, except for:
- bugfix for arr[::2] literal misparsed as an id-expression;
- middle-end adding a runtime check for non-positive strides (see OpenMP spec
issue #5106);
- rejection of map iterators with non-contiguous array section (was too
broad);
- base expression when fixed indices are interspersed with array sections;
- merged/deduped test cases.
* Patch 2/3 — C: approved, except for:
- the fix for the missing check for compile-time positive stride;
- merged/deduped test cases.
* Patch 3/3 — Fortran: not approved.
Julian Brown (3):
OpenMP: Support strided and shaped-array updates for C++
OpenMP: Array shaping operator and strided "target update" for C
OpenMP: Noncontiguous "target update" for Fortran
gcc/c-family/c-omp.cc | 243 +++++++-
gcc/c-family/c-pretty-print.cc | 5 +
gcc/c/c-parser.cc | 438 ++++++++++++---
gcc/c/c-tree.h | 13 +-
gcc/c/c-typeck.cc | 315 +++++++++--
gcc/cp/cp-objcp-common.cc | 1 +
gcc/cp/cp-tree.def | 1 +
gcc/cp/cp-tree.h | 13 +-
gcc/cp/decl.cc | 76 +++
gcc/cp/decl2.cc | 17 +-
gcc/cp/error.cc | 5 +
gcc/cp/mangle.cc | 1 +
gcc/cp/operators.def | 1 +
gcc/cp/parser.cc | 424 ++++++++++++--
gcc/cp/parser.h | 17 +-
gcc/cp/pt.cc | 32 +-
gcc/cp/semantics.cc | 327 +++++++++--
gcc/cp/typeck.cc | 16 +-
gcc/fortran/expr.cc | 3 +
gcc/fortran/openmp.cc | 23 +-
gcc/fortran/trans-openmp.cc | 522 +++++++++++++++++
gcc/gimplify.cc | 90 ++-
gcc/omp-general.cc | 52 ++
gcc/omp-general.h | 4 +-
gcc/omp-low.cc | 523 +++++++++++++++++-
.../c-c++-common/gomp/array-section-1.c | 18 +
.../c-c++-common/gomp/array-section-2.c | 32 ++
.../c-c++-common/gomp/array-section-3.c | 18 +
.../c-c++-common/gomp/array-shaping-1.c | 14 +
.../c-c++-common/gomp/bad-array-section-1.c | 16 +
.../c-c++-common/gomp/bad-array-shaping-1.c | 12 +
.../c-c++-common/gomp/bad-array-shaping-2.c | 25 +
.../c-c++-common/gomp/bad-array-shaping-3.c | 27 +
.../gomp/target-map-iterators-1.c | 2 +-
.../c-c++-common/gomp/target-update-8.c | 26 +
.../gomp/target-update-iterators-4.c | 36 ++
.../gomp/target-update-iterators-6.c | 34 ++
gcc/testsuite/g++.dg/gomp/array-section-5.C | 6 +-
gcc/testsuite/g++.dg/gomp/array-section-7.C | 67 +++
gcc/testsuite/g++.dg/gomp/array-section-8.C | 36 ++
gcc/testsuite/g++.dg/gomp/array-shaping-1.C | 22 +
gcc/testsuite/g++.dg/gomp/array-shaping-2.C | 134 +++++
.../g++.dg/gomp/bad-array-shaping-1.C | 33 ++
.../g++.dg/gomp/bad-array-shaping-2.C | 52 ++
.../g++.dg/gomp/bad-array-shaping-3.C | 53 ++
.../g++.dg/gomp/bad-array-shaping-4.C | 60 ++
.../g++.dg/gomp/bad-array-shaping-5.C | 55 ++
.../g++.dg/gomp/bad-array-shaping-6.C | 59 ++
.../g++.dg/gomp/bad-array-shaping-7.C | 44 ++
.../g++.dg/gomp/bad-array-shaping-8.C | 30 +
.../g++.dg/gomp/map-static-cast-lvalue-1.C | 1 -
gcc/testsuite/gcc.dg/gomp/array-shaping-1.c | 17 +
gcc/testsuite/gcc.dg/gomp/array-shaping-2.c | 16 +
.../gcc.dg/gomp/bad-array-shaping-c-2.c | 24 +
.../gcc.dg/gomp/bad-array-shaping-c-3.c | 30 +
.../gcc.dg/gomp/bad-array-shaping-c-4.c | 27 +
.../gcc.dg/gomp/bad-array-shaping-c-5.c | 17 +
.../gcc.dg/gomp/bad-array-shaping-c-7.c | 15 +
.../gfortran.dg/gomp/bad-array-section-1.f90 | 31 ++
.../gfortran.dg/gomp/noncontig-updates-1.f90 | 19 +
.../gfortran.dg/gomp/noncontig-updates-2.f90 | 16 +
.../gfortran.dg/gomp/noncontig-updates-3.f90 | 16 +
.../gfortran.dg/gomp/noncontig-updates-4.f90 | 15 +
.../gfortran.dg/gomp/noncontig-updates-5.f90 | 28 +
.../gfortran.dg/gomp/noncontig-updates-6.f90 | 15 +
.../gomp/target-update-iterators-3.f90 | 11 +-
.../gomp/target-update-iterators-4.f90 | 21 +
.../gomp/target-update-iterators-5.f90 | 23 +
.../gomp/target-update-iterators-6.f90 | 39 ++
gcc/tree-pretty-print.cc | 17 +
gcc/tree.def | 8 +-
include/gomp-constants.h | 9 +-
libgomp/libgomp.h | 15 +
libgomp/target.c | 267 ++++++---
.../testsuite/libgomp.c++/array-shaping-1.C | 243 ++++++++
.../testsuite/libgomp.c++/array-shaping-10.C | 39 ++
.../testsuite/libgomp.c++/array-shaping-11.C | 63 +++
.../testsuite/libgomp.c++/array-shaping-12.C | 41 ++
.../testsuite/libgomp.c++/array-shaping-13.C | 54 ++
.../testsuite/libgomp.c++/array-shaping-14.C | 65 +++
.../testsuite/libgomp.c++/array-shaping-3.C | 38 ++
.../testsuite/libgomp.c++/array-shaping-4.C | 38 ++
.../testsuite/libgomp.c++/array-shaping-6.C | 54 ++
.../testsuite/libgomp.c++/array-shaping-7.C | 54 ++
.../testsuite/libgomp.c++/array-shaping-8.C | 65 +++
.../testsuite/libgomp.c++/array-shaping-9.C | 95 ++++
.../libgomp.c++/map-static-cast-lvalue-1.C | 16 +
.../libgomp.c-c++-common/array-shaping-14.c | 34 ++
.../libgomp.c-c++-common/array-shaping-15.c | 41 ++
.../libgomp.c-c++-common/array-shaping-17.c | 40 ++
.../libgomp.c-c++-common/array-shaping-18.c | 236 ++++++++
.../libgomp.c-c++-common/array-shaping-19.c | 36 ++
.../libgomp.c-c++-common/array-shaping-20.c | 38 ++
.../libgomp.c-c++-common/array-shaping-21.c | 45 ++
.../target-update-iterators-4.c | 90 +++
.../target-update-iterators-5.c | 112 ++++
.../target-update-leading-index-1.c | 81 +++
.../target-update-negative-stride-1.c | 26 +
libgomp/testsuite/libgomp.c/array-shaping-2.c | 39 ++
libgomp/testsuite/libgomp.c/array-shaping-3.c | 42 ++
.../libgomp.c/usm_env_handling-4-self.c | 7 +
.../testsuite/libgomp.c/usm_env_handling-4.c | 95 ++++
.../libgomp.fortran/noncontig-updates-1.f90 | 54 ++
.../libgomp.fortran/noncontig-updates-10.f90 | 29 +
.../libgomp.fortran/noncontig-updates-11.f90 | 51 ++
.../libgomp.fortran/noncontig-updates-12.f90 | 59 ++
.../libgomp.fortran/noncontig-updates-13.f90 | 42 ++
.../libgomp.fortran/noncontig-updates-2.f90 | 101 ++++
.../libgomp.fortran/noncontig-updates-3.f90 | 47 ++
.../libgomp.fortran/noncontig-updates-4.f90 | 78 +++
.../libgomp.fortran/noncontig-updates-5.f90 | 55 ++
.../libgomp.fortran/noncontig-updates-6.f90 | 34 ++
.../libgomp.fortran/noncontig-updates-7.f90 | 36 ++
.../libgomp.fortran/noncontig-updates-8.f90 | 39 ++
.../libgomp.fortran/noncontig-updates-9.f90 | 34 ++
.../target-update-iterators-4.f90 | 36 ++
.../target-update-iterators-5.f90 | 55 ++
117 files changed, 7003 insertions(+), 344 deletions(-)
create mode 100644 gcc/testsuite/c-c++-common/gomp/array-section-1.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/array-section-2.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/array-section-3.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/array-shaping-1.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/bad-array-section-1.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/bad-array-shaping-1.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/bad-array-shaping-2.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/bad-array-shaping-3.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/target-update-8.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/target-update-iterators-4.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/target-update-iterators-6.c
create mode 100644 gcc/testsuite/g++.dg/gomp/array-section-7.C
create mode 100644 gcc/testsuite/g++.dg/gomp/array-section-8.C
create mode 100644 gcc/testsuite/g++.dg/gomp/array-shaping-1.C
create mode 100644 gcc/testsuite/g++.dg/gomp/array-shaping-2.C
create mode 100644 gcc/testsuite/g++.dg/gomp/bad-array-shaping-1.C
create mode 100644 gcc/testsuite/g++.dg/gomp/bad-array-shaping-2.C
create mode 100644 gcc/testsuite/g++.dg/gomp/bad-array-shaping-3.C
create mode 100644 gcc/testsuite/g++.dg/gomp/bad-array-shaping-4.C
create mode 100644 gcc/testsuite/g++.dg/gomp/bad-array-shaping-5.C
create mode 100644 gcc/testsuite/g++.dg/gomp/bad-array-shaping-6.C
create mode 100644 gcc/testsuite/g++.dg/gomp/bad-array-shaping-7.C
create mode 100644 gcc/testsuite/g++.dg/gomp/bad-array-shaping-8.C
create mode 100644 gcc/testsuite/gcc.dg/gomp/array-shaping-1.c
create mode 100644 gcc/testsuite/gcc.dg/gomp/array-shaping-2.c
create mode 100644 gcc/testsuite/gcc.dg/gomp/bad-array-shaping-c-2.c
create mode 100644 gcc/testsuite/gcc.dg/gomp/bad-array-shaping-c-3.c
create mode 100644 gcc/testsuite/gcc.dg/gomp/bad-array-shaping-c-4.c
create mode 100644 gcc/testsuite/gcc.dg/gomp/bad-array-shaping-c-5.c
create mode 100644 gcc/testsuite/gcc.dg/gomp/bad-array-shaping-c-7.c
create mode 100644 gcc/testsuite/gfortran.dg/gomp/bad-array-section-1.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/noncontig-updates-1.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/noncontig-updates-2.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/noncontig-updates-3.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/noncontig-updates-4.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/noncontig-updates-5.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/noncontig-updates-6.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/target-update-iterators-4.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/target-update-iterators-5.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/target-update-iterators-6.f90
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-1.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-10.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-11.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-12.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-13.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-14.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-3.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-4.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-6.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-7.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-8.C
create mode 100644 libgomp/testsuite/libgomp.c++/array-shaping-9.C
create mode 100644 libgomp/testsuite/libgomp.c++/map-static-cast-lvalue-1.C
create mode 100644 libgomp/testsuite/libgomp.c-c++-common/array-shaping-14.c
create mode 100644 libgomp/testsuite/libgomp.c-c++-common/array-shaping-15.c
create mode 100644 libgomp/testsuite/libgomp.c-c++-common/array-shaping-17.c
create mode 100644 libgomp/testsuite/libgomp.c-c++-common/array-shaping-18.c
create mode 100644 libgomp/testsuite/libgomp.c-c++-common/array-shaping-19.c
create mode 100644 libgomp/testsuite/libgomp.c-c++-common/array-shaping-20.c
create mode 100644 libgomp/testsuite/libgomp.c-c++-common/array-shaping-21.c
create mode 100644
libgomp/testsuite/libgomp.c-c++-common/target-update-iterators-4.c
create mode 100644
libgomp/testsuite/libgomp.c-c++-common/target-update-iterators-5.c
create mode 100644
libgomp/testsuite/libgomp.c-c++-common/target-update-leading-index-1.c
create mode 100644
libgomp/testsuite/libgomp.c-c++-common/target-update-negative-stride-1.c
create mode 100644 libgomp/testsuite/libgomp.c/array-shaping-2.c
create mode 100644 libgomp/testsuite/libgomp.c/array-shaping-3.c
create mode 100644 libgomp/testsuite/libgomp.c/usm_env_handling-4-self.c
create mode 100644 libgomp/testsuite/libgomp.c/usm_env_handling-4.c
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-1.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-10.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-11.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-12.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-13.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-2.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-3.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-4.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-5.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-6.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-7.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-8.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-9.f90
create mode 100644
libgomp/testsuite/libgomp.fortran/target-update-iterators-4.f90
create mode 100644
libgomp/testsuite/libgomp.fortran/target-update-iterators-5.f90
--
2.55.0