openmp: Fix C ICE on OpenMP atomics
authorJakub Jelinek <jakub@redhat.com>
Tue, 24 Nov 2020 08:04:28 +0000 (09:04 +0100)
committerJakub Jelinek <jakub@redhat.com>
Tue, 24 Nov 2020 08:04:28 +0000 (09:04 +0100)
commit2aaf44a90283156ec0e70ad4d9030f3ba5054c6f
treeca36956c3b723576c2227b668f2520cdf406acfc
parent4866b2f5db117f9e89f82c44ffed57178c09cc49
openmp: Fix C ICE on OpenMP atomics

c_parser_binary_expression was using build2 to create a temporary holder
for binary expression that c_parser_atomic and c_finish_omp_atomic can then
handle.  The latter performs then all the needed checking.

Unfortunately, build2 performs some checking too, e.g. PLUS_EXPR vs.
POINTER_PLUS_EXPR or matching types of the arguments, nothing we can guarantee
at the parsing time.  So we need something like C++ build_min_nt*.  This
patch implements that inline.

2020-11-24  Jakub Jelinek  <jakub@redhat.com>

PR c/97958
* c-parser.c (c_parser_binary_expression): For omp atomic binary
expressions, use make_node instead of build2 to avoid checking build2
performs.

* c-c++-common/gomp/pr97958.c: New test.
gcc/c/c-parser.c
gcc/testsuite/c-c++-common/gomp/pr97958.c [new file with mode: 0644]