This patchset implements support for OpenMP allocate directive support
in C++. This version splits the patch up into a significantly more coherent and
reviewable set of patches. I ran into many issues during this, as a result this
version gains a few features, and loses some early diagnostics in templates.
However, it should also be significantly more polished.
Bootstrapped and regtested on x86_64-linux-gnu.
Waffl3x (12):
libgomp.c: Change _Alignof to alignof for C++ in test
OpenMP/C: Change repetitive allocator clause diagnostic wording
OpenMP/C++: Remove case PRAGMA_OMP_ALLOCATE from
cp_parser_omp_construct
OpenMP/C++: Add support for 'omp allocate' directive
OpenMP/C++: Enhance diagnostics of 'omp allocate' directive
OpenMP/C++: Force location wrapper on 'omp allocate' directive clauses
OpenMP/C++: Don't do NRVO on vars used in an 'omp allocate' directive
OpenMP/C++: Add static analysis of allocate directive allocator clause
OpenMP/C++: Diagnose constexpr vars in an allocate directive
OpenMP/C++: Sorry for static vars in implicit constexpr functions
OpenMP/C++: Sorry for allocate directive in omp::decl attribute
OpenMP/C++: Avoid quadratic complexity in diagnostic
gcc/c/c-parser.cc | 2 +-
gcc/cp/constexpr.cc | 2 +
gcc/cp/cp-tree.def | 11 +
gcc/cp/cp-tree.h | 17 +
gcc/cp/parser.cc | 405 ++++++-
gcc/cp/pt.cc | 40 +
gcc/cp/semantics.cc | 414 +++++++
gcc/cp/typeck.cc | 5 +-
gcc/gimplify.cc | 10 +-
gcc/testsuite/c-c++-common/gomp/allocate-10.c | 5 +-
gcc/testsuite/c-c++-common/gomp/allocate-11.c | 29 +-
gcc/testsuite/c-c++-common/gomp/allocate-12.c | 33 +-
gcc/testsuite/c-c++-common/gomp/allocate-14.c | 3 -
gcc/testsuite/c-c++-common/gomp/allocate-15.c | 3 -
gcc/testsuite/c-c++-common/gomp/allocate-16.c | 20 +-
gcc/testsuite/c-c++-common/gomp/allocate-17.c | 2 +-
gcc/testsuite/c-c++-common/gomp/allocate-18.c | 18 +-
gcc/testsuite/c-c++-common/gomp/allocate-19.c | 25 +-
gcc/testsuite/c-c++-common/gomp/allocate-20.c | 343 ++++++
gcc/testsuite/c-c++-common/gomp/allocate-5.c | 32 +-
gcc/testsuite/c-c++-common/gomp/allocate-9.c | 94 +-
.../gomp/allocate-allocator-handle.h | 19 +
gcc/testsuite/c-c++-common/gomp/directive-1.c | 1 -
.../c-c++-common/gomp/uses_allocators-1.c | 4 +-
gcc/testsuite/g++.dg/gomp/allocate-10.C | 111 ++
gcc/testsuite/g++.dg/gomp/allocate-11.C | 18 +
gcc/testsuite/g++.dg/gomp/allocate-12.C | 38 +
gcc/testsuite/g++.dg/gomp/allocate-13.C | 28 +
gcc/testsuite/g++.dg/gomp/allocate-14.C | 1037 +++++++++++++++++
gcc/testsuite/g++.dg/gomp/allocate-15.C | 92 ++
gcc/testsuite/g++.dg/gomp/allocate-16.C | 251 ++++
gcc/testsuite/g++.dg/gomp/allocate-17.C | 557 +++++++++
gcc/testsuite/g++.dg/gomp/allocate-18.C | 274 +++++
gcc/testsuite/g++.dg/gomp/allocate-19.C | 128 ++
gcc/testsuite/g++.dg/gomp/allocate-20.C | 96 ++
gcc/testsuite/g++.dg/gomp/allocate-21.C | 88 ++
gcc/testsuite/g++.dg/gomp/allocate-22.C | 31 +
gcc/testsuite/g++.dg/gomp/allocate-23.C | 24 +
gcc/testsuite/g++.dg/gomp/allocate-24.C | 26 +
gcc/testsuite/g++.dg/gomp/allocate-5.C | 410 +++++++
gcc/testsuite/g++.dg/gomp/allocate-6.C | 391 +++++++
gcc/testsuite/g++.dg/gomp/allocate-7.C | 224 ++++
gcc/testsuite/g++.dg/gomp/allocate-8.C | 48 +
gcc/testsuite/g++.dg/gomp/allocate-9.C | 78 ++
.../g++.dg/gomp/allocate-allocator-handle.h | 18 +
.../g++.dg/gomp/allocate-handles-1.C | 61 +
.../g++.dg/gomp/allocate-handles-2.C | 45 +
gcc/testsuite/g++.dg/gomp/omp-constexpr.C | 3 +-
libgomp/testsuite/libgomp.c++/allocate-2.C | 329 ++++++
.../allocate-4.c | 3 -
.../allocate-5.c | 3 -
.../allocate-6.c | 3 -
.../allocate-7.c | 8 +-
53 files changed, 5752 insertions(+), 208 deletions(-)
create mode 100644 gcc/testsuite/c-c++-common/gomp/allocate-20.c
create mode 100644 gcc/testsuite/c-c++-common/gomp/allocate-allocator-handle.h
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-10.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-11.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-12.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-13.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-14.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-15.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-16.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-17.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-18.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-19.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-20.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-21.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-22.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-23.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-24.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-5.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-6.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-7.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-8.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-9.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-allocator-handle.h
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-handles-1.C
create mode 100644 gcc/testsuite/g++.dg/gomp/allocate-handles-2.C
create mode 100644 libgomp/testsuite/libgomp.c++/allocate-2.C
rename libgomp/testsuite/{libgomp.c => libgomp.c-c++-common}/allocate-4.c (95%)
rename libgomp/testsuite/{libgomp.c => libgomp.c-c++-common}/allocate-5.c (96%)
rename libgomp/testsuite/{libgomp.c => libgomp.c-c++-common}/allocate-6.c (98%)
rename libgomp/testsuite/{libgomp.c => libgomp.c-c++-common}/allocate-7.c (84%)
--
2.54.0