]> git.ipfire.org Git - thirdparty/gcc.git/commit
OpenMP: Require target and/or targetsync init modifier [PR118965]
authorSandra Loosemore <sloosemore@baylibre.com>
Mon, 31 Mar 2025 22:02:35 +0000 (22:02 +0000)
committerSandra Loosemore <sloosemore@baylibre.com>
Thu, 3 Apr 2025 23:58:30 +0000 (23:58 +0000)
commitbe92d54c5622705b03f7db3e3e214b055bf82176
tree36bd9d99cdf545c9a85176086f713d74deb87651
parentf82475810a3c09284e87fb99b95f64f7704078a9
OpenMP: Require target and/or targetsync init modifier [PR118965]

As noted in PR 118965, the initial interop implementation overlooked
the requirement in the OpenMP spec that at least one of the "target"
and "targetsync" modifiers is required in both the interop construct
init clause and the declare variant append_args clause.

Adding the check was fairly straightforward, but it broke about a
gazillion existing test cases.  In particular, things like "init (x, y)"
which were previously accepted (and tested for being accepted) aren't
supposed to be allowed by the spec, much less things like "init (target)"
where target was previously interpreted as a variable name instead of a
modifier.  Since one of the effects of the change is that at least one
modifier is always required, I found that deleting all the code that was
trying to detect and handle the no-modifier case allowed for better
diagnostics.

gcc/c/ChangeLog
PR middle-end/118965
* c-parser.cc (c_parser_omp_clause_init_modifiers): Adjust
error message.
(c_parser_omp_clause_init): Remove code for recognizing clauses
without modifiers.  Diagnose missing target/targetsync modifier.
(c_finish_omp_declare_variant): Diagnose missing target/targetsync
modifier.

gcc/cp/ChangeLog
PR middle-end/118965
* parser.cc (c_parser_omp_clause_init_modifiers): Adjust
error message.
(cp_parser_omp_clause_init): Remove code for recognizing clauses
without modifiers.  Diagnose missing target/targetsync modifier.
(cp_finish_omp_declare_variant): Diagnose missing target/targetsync
modifier.

gcc/fortran/ChangeLog
PR middle-end/118965
* openmp.cc (gfc_parser_omp_clause_init_modifiers): Fix some
inconsistent code indentation.  Remove code for recognizing
clauses without modifiers.  Diagnose prefer_type without a
following paren.  Adjust error message for an unrecognized modifier.
Diagnose missing target/targetsync modifier.
(gfc_match_omp_init): Fix more inconsistent code indentation.

gcc/testsuite/ChangeLog
PR middle-end/118965
* c-c++-common/gomp/append-args-1.c: Add target/targetsync
modifiers so tests do what they were previously supposed to do.
Adjust expected output.
* c-c++-common/gomp/append-args-7.c: Likewise.
* c-c++-common/gomp/append-args-8.c: Likewise.
* c-c++-common/gomp/append-args-9.c: Likewise.
* c-c++-common/gomp/interop-1.c: Likewise.
* c-c++-common/gomp/interop-2.c: Likewise.
* c-c++-common/gomp/interop-3.c: Likewise.
* c-c++-common/gomp/interop-4.c: Likewise.
* c-c++-common/gomp/pr118965-1.c: New.
* c-c++-common/gomp/pr118965-2.c: New.
* g++.dg/gomp/append-args-1.C: Add target/targetsync modifiers
and adjust expected output.
* g++.dg/gomp/append-args-2.C: Likewise.
* g++.dg/gomp/append-args-6.C: Likewise.
* g++.dg/gomp/append-args-7.C: Likewise.
* g++.dg/gomp/append-args-8.C: Likewise.
* g++.dg/gomp/interop-5.C: Likewise.
* gfortran.dg/gomp/append_args-1.f90: Add target/targetsync
modifiers and adjust expected output.
* gfortran.dg/gomp/append_args-2.f90: Likewise.
* gfortran.dg/gomp/append_args-3.f90: Likewise.
* gfortran.dg/gomp/append_args-4.f90: Likewise.
* gfortran.dg/gomp/interop-1.f90: Likewise.
* gfortran.dg/gomp/interop-2.f90: Likewise.
* gfortran.dg/gomp/interop-3.f90: Likewise.
* gfortran.dg/gomp/interop-4.f90: Likewise.
* gfortran.dg/gomp/pr118965-1.f90: New.
* gfortran.dg/gomp/pr118965-2.f90: New.

(cherry picked from commit aca8155c09001f269a20d6df438fa0e749dd5388)
29 files changed:
gcc/c/c-parser.cc
gcc/cp/parser.cc
gcc/fortran/openmp.cc
gcc/testsuite/c-c++-common/gomp/append-args-1.c
gcc/testsuite/c-c++-common/gomp/append-args-7.c
gcc/testsuite/c-c++-common/gomp/append-args-8.c
gcc/testsuite/c-c++-common/gomp/append-args-9.c
gcc/testsuite/c-c++-common/gomp/interop-1.c
gcc/testsuite/c-c++-common/gomp/interop-2.c
gcc/testsuite/c-c++-common/gomp/interop-3.c
gcc/testsuite/c-c++-common/gomp/interop-4.c
gcc/testsuite/c-c++-common/gomp/pr118965-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/pr118965-2.c [new file with mode: 0644]
gcc/testsuite/g++.dg/gomp/append-args-1.C
gcc/testsuite/g++.dg/gomp/append-args-2.C
gcc/testsuite/g++.dg/gomp/append-args-6.C
gcc/testsuite/g++.dg/gomp/append-args-7.C
gcc/testsuite/g++.dg/gomp/append-args-8.C
gcc/testsuite/g++.dg/gomp/interop-5.C
gcc/testsuite/gfortran.dg/gomp/append_args-1.f90
gcc/testsuite/gfortran.dg/gomp/append_args-2.f90
gcc/testsuite/gfortran.dg/gomp/append_args-3.f90
gcc/testsuite/gfortran.dg/gomp/append_args-4.f90
gcc/testsuite/gfortran.dg/gomp/interop-1.f90
gcc/testsuite/gfortran.dg/gomp/interop-2.f90
gcc/testsuite/gfortran.dg/gomp/interop-3.f90
gcc/testsuite/gfortran.dg/gomp/interop-4.f90
gcc/testsuite/gfortran.dg/gomp/pr118965-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/pr118965-2.f90 [new file with mode: 0644]