! REQUIRES: openmp_runtime ! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp-version=50 ! Semantic checks for various assignments related to atomic constructs program sample use omp_lib integer :: x, v integer :: y(10) integer, allocatable :: k integer a(10) type sample_type integer :: y integer :: m endtype type(sample_type) :: z character :: l, r !$omp atomic read v = x !$omp atomic read !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches scalar INTEGER(4) and rank 1 array of INTEGER(4) !ERROR: Expected scalar expression on the RHS of atomic assignment statement v = y(1:3) !$omp atomic read !ERROR: Expected scalar variable of intrinsic type on RHS of atomic assignment statement v = x * (10 + x) !$omp atomic read !ERROR: Expected scalar variable of intrinsic type on RHS of atomic assignment statement v = 4 !$omp atomic read !ERROR: k must not have ALLOCATABLE attribute v = k !$omp atomic write !ERROR: k must not have ALLOCATABLE attribute k = x !$omp atomic update !ERROR: k must not have ALLOCATABLE attribute k = k + x * (v * x) !$omp atomic !ERROR: k must not have ALLOCATABLE attribute k = v * k !$omp atomic write !ERROR: RHS expression on atomic assignment statement cannot access 'z%y' z%y = x + z%y !$omp atomic write !ERROR: RHS expression on atomic assignment statement cannot access 'x' x = x !$omp atomic write !ERROR: RHS expression on atomic assignment statement cannot access 'm' m = min(m, x, z%m) + k !$omp atomic read !ERROR: RHS expression on atomic assignment statement cannot access 'x' x = x !$omp atomic read !ERROR: Expected scalar variable of intrinsic type on RHS of atomic assignment statement !ERROR: RHS expression on atomic assignment statement cannot access 'm' m = min(m, x, z%m) + k !$omp atomic read !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches scalar INTEGER(4) and rank 1 array of INTEGER(4) !ERROR: Expected scalar expression on the RHS of atomic assignment statement x = a !$omp atomic read !ERROR: Expected scalar variable on the LHS of atomic assignment statement a = x !$omp atomic write !ERROR: No intrinsic or user-defined ASSIGNMENT(=) matches scalar INTEGER(4) and rank 1 array of INTEGER(4) !ERROR: Expected scalar expression on the RHS of atomic assignment statement x = a !$omp atomic write !ERROR: Expected scalar variable on the LHS of atomic assignment statement a = x !$omp atomic capture v = x x = x + 1 !$omp end atomic !$omp atomic release capture v = x !ERROR: Atomic update statement should be of form `x = x operator expr` OR `x = expr operator x` x = b + (x*1) !$omp end atomic !$omp atomic capture hint(0) v = x x = 1 !$omp end atomic !$omp atomic capture !ERROR: Captured variable/array element/derived-type component x expected to be assigned in the second statement of ATOMIC CAPTURE construct v = x b = b + 1 !$omp end atomic !$omp atomic capture !ERROR: Captured variable/array element/derived-type component x expected to be assigned in the second statement of ATOMIC CAPTURE construct v = x b = 10 !$omp end atomic !$omp atomic capture !ERROR: Updated variable/array element/derived-type component x expected to be captured in the second statement of ATOMIC CAPTURE construct x = x + 10 v = b !$omp end atomic !$omp atomic capture !ERROR: Invalid ATOMIC CAPTURE construct statements. Expected one of [update-stmt, capture-stmt], [capture-stmt, update-stmt], or [capture-stmt, write-stmt] v = 1 x = 4 !$omp end atomic !$omp atomic capture !ERROR: Captured variable/array element/derived-type component z%y expected to be assigned in the second statement of ATOMIC CAPTURE construct x = z%y z%m = z%m + 1.0 !$omp end atomic !$omp atomic capture !ERROR: Updated variable/array element/derived-type component z%m expected to be captured in the second statement of ATOMIC CAPTURE construct z%m = z%m + 1.0 x = z%y !$omp end atomic !$omp atomic capture !ERROR: Captured variable/array element/derived-type component y(2) expected to be assigned in the second statement of ATOMIC CAPTURE construct x = y(2) y(1) = y(1) + 1 !$omp end atomic !$omp atomic capture !ERROR: Updated variable/array element/derived-type component y(1) expected to be captured in the second statement of ATOMIC CAPTURE construct y(1) = y(1) + 1 x = y(2) !$omp end atomic !$omp atomic read !ERROR: Expected scalar variable on the LHS of atomic assignment statement !ERROR: Expected scalar expression on the RHS of atomic assignment statement l = r !$omp atomic write !ERROR: Expected scalar variable on the LHS of atomic assignment statement !ERROR: Expected scalar expression on the RHS of atomic assignment statement l = r end program