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 second version was:
https://gcc.gnu.org/pipermail/gcc-patches/2026-September/732574.html.
The differences relative to prevous version are, for each patch, in a separate
ChangeLog section at the bottom dated 2026-10-16. It is mostly small bug fixes
and corner-case handling.
The approval status has not changed since v2 -- for reference:
* 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 | 448 ++++++++++++---
gcc/c/c-tree.h | 13 +-
gcc/c/c-typeck.cc | 327 +++++++++--
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 | 427 ++++++++++++--
gcc/cp/parser.h | 17 +-
gcc/cp/pt.cc | 32 +-
gcc/cp/semantics.cc | 339 +++++++++--
gcc/cp/typeck.cc | 16 +-
gcc/fortran/expr.cc | 3 +
gcc/fortran/openmp.cc | 29 +-
gcc/fortran/trans-openmp.cc | 522 +++++++++++++++++
gcc/gimplify.cc | 94 +++-
gcc/omp-general.cc | 52 ++
gcc/omp-general.h | 4 +-
gcc/omp-low.cc | 529 +++++++++++++++++-
.../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-section-2.c | 29 +
.../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 ++
.../gomp/zero-length-strided-section-1.c | 33 ++
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 +++++
gcc/testsuite/g++.dg/gomp/array-shaping-3.C | 12 +
.../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/testsuite/gcc.dg/gomp/array-shaping-3.c | 12 +
.../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 +
.../gfortran.dg/gomp/noncontig-updates-7.f90 | 17 +
.../gfortran.dg/gomp/noncontig-updates-8.f90 | 37 ++
.../gfortran.dg/gomp/noncontig-updates-9.f90 | 31 +
.../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 | 282 +++++++---
.../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-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 ++
.../libgomp.c-c++-common/array-shaping-22.c | 65 +++
.../target-update-iterators-4.c | 90 +++
.../target-update-iterators-5.c | 114 ++++
.../target-update-leading-index-1.c | 81 +++
.../target-update-negative-stride-1.c | 26 +
.../target-update-strided-bias-1.c | 57 ++
.../target-update-strided-overrun-1.c | 56 ++
.../target-update-strided-overrun-2.c | 51 ++
.../target-update-strided-zero-length-1.c | 80 +++
.../target-update-trailing-dims-1.c | 42 ++
libgomp/testsuite/libgomp.c/array-section-1.c | 49 ++
libgomp/testsuite/libgomp.c/array-shaping-2.c | 39 ++
.../testsuite/libgomp.c/array-shaping-23.c | 46 ++
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-14.f90 | 41 ++
.../libgomp.fortran/noncontig-updates-15.f90 | 95 ++++
.../libgomp.fortran/noncontig-updates-16.f90 | 163 ++++++
.../libgomp.fortran/noncontig-updates-17.f90 | 36 ++
.../libgomp.fortran/noncontig-updates-18.f90 | 150 +++++
.../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 | 56 ++
136 files changed, 8105 insertions(+), 350 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-section-2.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/c-c++-common/gomp/zero-length-strided-section-1.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/array-shaping-3.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/array-shaping-3.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/noncontig-updates-7.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/noncontig-updates-8.f90
create mode 100644 gcc/testsuite/gfortran.dg/gomp/noncontig-updates-9.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-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/array-shaping-22.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-c++-common/target-update-strided-bias-1.c
create mode 100644
libgomp/testsuite/libgomp.c-c++-common/target-update-strided-overrun-1.c
create mode 100644
libgomp/testsuite/libgomp.c-c++-common/target-update-strided-overrun-2.c
create mode 100644
libgomp/testsuite/libgomp.c-c++-common/target-update-strided-zero-length-1.c
create mode 100644
libgomp/testsuite/libgomp.c-c++-common/target-update-trailing-dims-1.c
create mode 100644 libgomp/testsuite/libgomp.c/array-section-1.c
create mode 100644 libgomp/testsuite/libgomp.c/array-shaping-2.c
create mode 100644 libgomp/testsuite/libgomp.c/array-shaping-23.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-14.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-15.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-16.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-17.f90
create mode 100644 libgomp/testsuite/libgomp.fortran/noncontig-updates-18.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