On Fri, Sep 17, 2021 at 2:34 AM Jakub Jelinek via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> Hi!
>
> Besides the C++ FE changes, I've noticed that the C FE didn't reject
>   #pragma omp atomic capture compare
>   { v = x; x = y; }
> and other forms of atomic swap, this patch fixes that too.  And the
> c-family/ routine needed quite a few changes so that the new code
> in it works fine with both FEs.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk.
>
> 2021-09-17  Jakub Jelinek  <ja...@redhat.com>
>
> gcc/c-family/
>         * c-omp.c (c_finish_omp_atomic): Avoid creating
>         TARGET_EXPR if test is true, use create_tmp_var_raw instead of
>         create_tmp_var and add a zero initializer to TARGET_EXPRs that
>         had NULL initializer.  When omitting operands after v = x,
>         use type of v rather than type of x.  Fix type of vtmp
>         TARGET_EXPR.
> gcc/c/
>         * c-parser.c (c_parser_omp_atomic): Reject atomic swap if capture
>         is true.
> gcc/cp/
>         * cp-tree.h (finish_omp_atomic): Add r and weak arguments.
>         * parser.c (cp_parser_omp_atomic): Update function comment for
>         OpenMP 5.1 atomics, parse OpenMP 5.1 atomics and fail, compare and
>         weak clauses.
>         * semantics.c (finish_omp_atomic): Add r and weak arguments, handle
>         them, handle COND_EXPRs.
>         * pt.c (tsubst_expr): Adjust for COND_EXPR forms that
>         finish_omp_atomic can now produce.
> gcc/testsuite/
>         * c-c++-common/gomp/atomic-18.c: Expect same diagnostics in C++ as in
>         C.
>         * c-c++-common/gomp/atomic-25.c: Drop c effective target.
>         * c-c++-common/gomp/atomic-26.c: Likewise.
>         * c-c++-common/gomp/atomic-27.c: Likewise.
>         * c-c++-common/gomp/atomic-28.c: Likewise.
>         * c-c++-common/gomp/atomic-29.c: Likewise.
>         * c-c++-common/gomp/atomic-30.c: Likewise.  Adjust expected 
> diagnostics
>         for C++ when it differs from C.
>         (foo): Change return type from double to void.
>         * g++.dg/gomp/atomic-5.C: Adjust expected diagnostics wording.
>         * g++.dg/gomp/atomic-20.C: New test.
> libgomp/
>         * testsuite/libgomp.c-c++-common/atomic-19.c: Drop c effective target.
>         Use /* */ comments instead of //.
>         * testsuite/libgomp.c-c++-common/atomic-20.c: Likewise.
>         * testsuite/libgomp.c-c++-common/atomic-21.c: Likewise.

This test fails on i686 and x86-64 with -m32 -mfpmath=sse:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102571

>         * testsuite/libgomp.c++/atomic-16.C: New test.
>         * testsuite/libgomp.c++/atomic-17.C: New test.
>

H.J.

Reply via email to