On Thu, Oct 29, 2020 at 06:05:41PM +0100, Tobias Burnus wrote:
> gcc/fortran/ChangeLog:
> 
>       * dump-parse-tree.c (show_omp_clauses): Handle atomic clauses.
>       (show_omp_node): Call it for atomic.
>       * gfortran.h (enum gfc_omp_atomic_op): Add GFC_OMP_ATOMIC_UNSET,
>       remove GFC_OMP_ATOMIC_SEQ_CST and GFC_OMP_ATOMIC_ACQ_REL.
>       (enum gfc_omp_memorder): Replace OMP_MEMORDER_LAST by
>       OMP_MEMORDER_UNSET, add OMP_MEMORDER_SEQ_CST/OMP_MEMORDER_RELAXED.
>       (gfc_omp_clauses): Add capture and atomic_op.
>       (gfc_code): remove omp_atomic.
>       * openmp.c (enum omp_mask1): Add atomic, capture, memorder clauses.
>       (gfc_match_omp_clauses): Match them.
>       (OMP_ATOMIC_CLAUSES): Add.
>       (gfc_match_omp_flush): Update for 'last' to 'unset' change.
>       (gfc_match_omp_oacc_atomic): Removed and placed content ..
>       (gfc_match_omp_atomic): ... here. Update for OpenMP 5 clauses.
>       (gfc_match_oacc_atomic): Match directly here.
>       (resolve_omp_atomic, gfc_resolve_omp_directive): Update.
>       * parse.c (parse_omp_oacc_atomic): Update for struct gfc_code changes.
>       * resolve.c (gfc_resolve_blocks): Update assert.
>       * st.c (gfc_free_statement): Also call for EXEC_O{ACC,MP}_ATOMIC.
>       * trans-openmp.c (gfc_trans_omp_atomic): Update.
>       (gfc_trans_omp_flush): Update for 'last' to 'unset' change.
> 
> gcc/testsuite/ChangeLog:
> 
>       * gfortran.dg/gomp/atomic-2.f90: New test.
>       * gfortran.dg/gomp/atomic.f90: New test.

> +         gfc_error ("OMP ATOMIC READ at %L incompatible with "
> +                    "ACQ_REL or RELEASE clauses", &loc);

> +      gfc_error ("Unexpected junk after $ACC ATOMIC statement at %C");
> +      gfc_free_omp_clauses (c);

Would be nice to be consistent.  I think most commonly in diagnostics
we use !$OMP ... and !$ACC , $ACC is not used anywhere, and while
some uses of just OMP ... crept in, they aren't used that much yet.

> -    = (gfc_omp_atomic_op) (atomic_code->ext.omp_atomic & 
> GFC_OMP_ATOMIC_MASK);
> +    = (gfc_omp_atomic_op) (atomic_code->ext.omp_clauses->atomic_op & 
> GFC_OMP_ATOMIC_MASK);

Too long line.

Otherwise LGTM.

        Jakub

Reply via email to