]> git.ipfire.org Git - thirdparty/gcc.git/commit
OpenMP: Handle more cases in user/condition selector
authorSandra Loosemore <sloosemore@baylibre.com>
Mon, 2 Jun 2025 03:26:42 +0000 (03:26 +0000)
committerSandra Loosemore <sloosemore@baylibre.com>
Mon, 2 Jun 2025 03:29:14 +0000 (03:29 +0000)
commit08c299a410b9314957e48a87f5bf50a4c034b744
treecf3dd0adccdb02ff849826458158d7591e6576f0
parentd3ddc93a9daa0924cf939508d192999487a9dd4c
OpenMP: Handle more cases in user/condition selector

Tobias had noted that the C front end was not treating C23 constexprs
as constant in the user/condition selector property, which led to
missed opportunities to resolve metadirectives at parse time.
Additionally neither C nor C++ was permitting the expression to have
pointer or floating-point type -- the former being a common idiom in
other C/C++ conditional expressions.  By using the existing front-end
hooks for the implicit conversion to bool in conditional expressions,
we also get free support for using a C++ class object that has a bool
conversion operator in the user/condition selector.

gcc/c/ChangeLog
* c-parser.cc (c_parser_omp_context_selector): Call
convert_lvalue_to_rvalue and c_objc_common_truthvalue_conversion
on the expression for OMP_TRAIT_PROPERTY_BOOL_EXPR.

gcc/cp/ChangeLog
* cp-tree.h (maybe_convert_cond): Declare.
* parser.cc (cp_parser_omp_context_selector): Call
maybe_convert_cond and fold_build_cleanup_point_expr on the
expression for OMP_TRAIT_PROPERTY_BOOL_EXPR.
* pt.cc (tsubst_omp_context_selector): Likewise.
* semantics.cc (maybe_convert_cond): Remove static declaration.

gcc/testsuite/ChangeLog
* c-c++-common/gomp/declare-variant-2.c: Update expected output.
* c-c++-common/gomp/metadirective-condition-constexpr.c: New.
* c-c++-common/gomp/metadirective-condition.c: New.
* c-c++-common/gomp/metadirective-error-recovery.c: Update expected
output.
* g++.dg/gomp/metadirective-condition-class.C: New.
* g++.dg/gomp/metadirective-condition-template.C: New.
gcc/c/c-parser.cc
gcc/cp/cp-tree.h
gcc/cp/parser.cc
gcc/cp/pt.cc
gcc/cp/semantics.cc
gcc/testsuite/c-c++-common/gomp/declare-variant-2.c
gcc/testsuite/c-c++-common/gomp/metadirective-condition-constexpr.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/metadirective-condition.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/gomp/metadirective-error-recovery.c
gcc/testsuite/g++.dg/gomp/metadirective-condition-class.C [new file with mode: 0644]
gcc/testsuite/g++.dg/gomp/metadirective-condition-template.C [new file with mode: 0644]