!RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=60 subroutine f00 integer :: x, v ! The end-directive is optional in ATOMIC READ. Expect no diagnostics. !$omp atomic read v = x !$omp atomic read v = x !$omp end atomic end subroutine f01 integer, pointer :: x, v ! Intrinsic assignment and pointer assignment are both ok. Expect no ! diagnostics. !$omp atomic read v = x !$omp atomic read v => x 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 read v = p(i) end subroutine f03 integer :: x(3), y(5), v(3) !$omp atomic read !ERROR: Atomic variable x should be a scalar v = x !$omp atomic read !ERROR: Atomic variable y(2_8:4_8:1_8) should be a scalar v = y(2:4) end subroutine f04 integer :: x, y(3), v !$omp atomic read !ERROR: Within atomic operation x and x access the same storage x = x ! Accessing same array, but not the same storage. Expect no diagnostics. !$omp atomic read y(1) = y(2) end subroutine f05 integer :: x, v !$omp atomic read !ERROR: Atomic expression x+1_4 should be a variable v = x + 1 end subroutine f06 character :: x, v !$omp atomic read !ERROR: Atomic variable x cannot have CHARACTER type v = x end subroutine f07 integer, allocatable :: x integer :: v allocate(x) !$omp atomic read !ERROR: Atomic variable x cannot be ALLOCATABLE v = x end subroutine f08 type :: struct integer :: m end type type(struct) :: x, v !$omp atomic read !ERROR: Atomic variable x should have an intrinsic type v = x end subroutine f09(x, v) class(*), pointer :: x, v !$omp atomic read !ERROR: Atomic variable x cannot be a pointer to a polymorphic type v => x end subroutine f10(x, v) type struct(length) integer, len :: length end type type(struct(*)), pointer :: x, v !$omp atomic read !ERROR: Atomic variable x is a pointer to a type with non-constant length parameter v => x end