| !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 |
| |