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

Reply via email to