103 lines · plain
1! REQUIRES: openmp_runtime2 3! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags4 5! OpenMP Atomic construct6! section 2.17.77! operator is one of +, *, -, /, .AND., .OR., .EQV., or .NEQV8 9program OmpAtomic10 use omp_lib11 CHARACTER c*3, d*312 LOGICAL l, m, n13 14 a = 115 b = 216 c = 'foo'17 d = 'bar'18 m = .TRUE.19 n = .FALSE.20 !$omp parallel num_threads(4)21 22 !$omp atomic23 a = a + (4*2)24 !$omp atomic25 a = a*(b + 1)26 !$omp atomic27 a = a - 328 !$omp atomic29 a = a/(b + 1)30 !$omp atomic31 !ERROR: The ** operator is not a valid ATOMIC UPDATE operation32 a = a**433 !$omp atomic 34 !ERROR: Atomic variable c cannot have CHARACTER type35 !ERROR: The atomic variable c should appear as an argument in the update operation36 c = d 37 !$omp atomic38 !ERROR: The < operator is not a valid ATOMIC UPDATE operation39 l = a .LT. b40 !$omp atomic41 !ERROR: The <= operator is not a valid ATOMIC UPDATE operation42 l = a .LE. b43 !$omp atomic44 !ERROR: The == operator is not a valid ATOMIC UPDATE operation45 l = a .EQ. b46 !$omp atomic47 !ERROR: The /= operator is not a valid ATOMIC UPDATE operation48 l = a .NE. b49 !$omp atomic50 !ERROR: The >= operator is not a valid ATOMIC UPDATE operation51 l = a .GE. b52 !$omp atomic53 !ERROR: The > operator is not a valid ATOMIC UPDATE operation54 l = a .GT. b55 !$omp atomic56 m = m .AND. n57 !$omp atomic58 m = m .OR. n59 !$omp atomic60 m = m .EQV. n61 !$omp atomic62 m = m .NEQV. n63 !$omp atomic update64 a = a + (4*2)65 !$omp atomic update66 a = a*(b + 1)67 !$omp atomic update68 a = a - 369 !$omp atomic update70 a = a/(b + 1)71 !$omp atomic update72 !ERROR: The ** operator is not a valid ATOMIC UPDATE operation73 a = a**474 !$omp atomic update75 !ERROR: Atomic variable c cannot have CHARACTER type76 !ERROR: This is not a valid ATOMIC UPDATE operation77 c = c//d78 !$omp atomic update79 !ERROR: The < operator is not a valid ATOMIC UPDATE operation80 l = a .LT. b81 !$omp atomic update82 !ERROR: The <= operator is not a valid ATOMIC UPDATE operation83 l = a .LE. b84 !$omp atomic update85 !ERROR: The == operator is not a valid ATOMIC UPDATE operation86 l = a .EQ. b87 !$omp atomic update88 !ERROR: The >= operator is not a valid ATOMIC UPDATE operation89 l = a .GE. b90 !$omp atomic update91 !ERROR: The > operator is not a valid ATOMIC UPDATE operation92 l = a .GT. b93 !$omp atomic update94 m = m .AND. n95 !$omp atomic update96 m = m .OR. n97 !$omp atomic update98 m = m .EQV. n99 !$omp atomic update100 m = m .NEQV. n101 !$omp end parallel102end program OmpAtomic103