OpenMP: Fixes for omp critical + hint
authorTobias Burnus <tobias@codesourcery.com>
Tue, 21 Jul 2020 16:29:53 +0000 (18:29 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Wed, 22 Jul 2020 07:57:15 +0000 (09:57 +0200)
commitc7c24828cfa4983ebc6744be3f913d0da6ff7163
treea8de602e795da9f5bac1ff2dcc94a1a4fd016876
parentfb1de6a8543f4d7a63149bf99b54037315b8c3bb
OpenMP: Fixes for omp critical + hint

gcc/c-family/ChangeLog:

* c-omp.c (c_finish_omp_critical): Check for no name but
nonzero hint provided.

gcc/c/ChangeLog:

* c-parser.c (c_parser_omp_clause_hint): Require nonnegative hint clause.
(c_parser_omp_critical): Permit hint(0) clause without named critical.
(c_parser_omp_construct): Don't assert if error_mark_node is returned.

gcc/cp/ChangeLog:

* parser.c (cp_parser_omp_clause_hint): Require nonnegative hint.
(cp_parser_omp_critical): Permit hint(0) clause without named critical.
* pt.c (tsubst_expr): Re-check the latter for templates.

gcc/fortran/ChangeLog:

* openmp.c (gfc_match_omp_critical): Fix handling hints; permit
hint clause without named critical.
(resolve_omp_clauses): Require nonnegative constant integer
for the hint clause.
(gfc_resolve_omp_directive): Check for no name but
nonzero value for hint clause.
* parse.c (parse_omp_structured_block): Fix same-name check
for critical.
* trans-openmp.c (gfc_trans_omp_critical): Handle hint clause properly.

libgomp/ChangeLog:

* omp_lib.f90.in: Add omp_sync_hint_* and omp_sync_hint_kind.
* omp_lib.h.in: Likewise.

gcc/testsuite/ChangeLog:

* g++.dg/gomp/critical-3.C: Add nameless critical with hint testcase.
* c-c++-common/gomp/critical-hint-1.c: New test.
* c-c++-common/gomp/critical-hint-2.c: New test.
* gfortran.dg/gomp/critical-hint-1.f90: New test.
* gfortran.dg/gomp/critical-hint-2.f90: New test.
14 files changed:
gcc/c-family/c-omp.c
gcc/c/c-parser.c
gcc/cp/parser.c
gcc/cp/pt.c
gcc/fortran/openmp.c
gcc/fortran/parse.c
gcc/fortran/trans-openmp.c
gcc/testsuite/c-c++-common/gomp/critical-hint-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/critical-hint-2.c [new file with mode: 0644]
gcc/testsuite/g++.dg/gomp/critical-3.C
gcc/testsuite/gfortran.dg/gomp/critical-hint-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/critical-hint-2.f90 [new file with mode: 0644]
libgomp/omp_lib.f90.in
libgomp/omp_lib.h.in