!RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=60 subroutine f00 integer :: x, v ! The end-directive is optional in ATOMIC WRITE. Expect no diagnostics. !$omp atomic write x = v + 1 !$omp atomic write x = v + 3 !$omp end atomic end subroutine f01 integer, pointer :: x, v ! Intrinsic assignment and pointer assignment are both ok. Expect no ! diagnostics. !$omp atomic write x = 2 * v + 3 !$omp atomic write x => v end subroutine f02(i) integer :: i, v interface function p(i) integer, pointer :: p integer :: i end end interface ! Atomic variable can be a function reference. Expect no diagostics. !$omp atomic write p(i) = v end subroutine f03 integer :: x(3), y(5), v(3) !$omp atomic write !ERROR: Atomic variable x should be a scalar x = v !$omp atomic write !ERROR: Atomic variable y(2_8:4_8:1_8) should be a scalar y(2:4) = v end subroutine f04 integer :: x, y(3), v !$omp atomic write !ERROR: Within atomic operation x and x+1_4 access the same storage x = x + 1 ! Accessing same array, but not the same storage. Expect no diagnostics. !$omp atomic write y(1) = y(2) end subroutine f06 character :: x, v !$omp atomic write !ERROR: Atomic variable x cannot have CHARACTER type x = v end subroutine f07 integer, allocatable :: x integer :: v allocate(x) !$omp atomic write !ERROR: Atomic variable x cannot be ALLOCATABLE x = v end