1! REQUIRES: openmp_runtime 2 3! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags 4 5! OpenMP Atomic construct 6! section 2.17.7 7! operator is one of +, *, -, /, .AND., .OR., .EQV., or .NEQV 8 9program OmpAtomic 10 use omp_lib 11 CHARACTER c*3, d*3 12 LOGICAL l, m, n 13 14 a = 1 15 b = 2 16 c = 'foo' 17 d = 'bar' 18 m = .TRUE. 19 n = .FALSE. 20 !$omp parallel num_threads(4) 21 22 !$omp atomic 23 a = a + (4*2) 24 !$omp atomic 25 a = a*(b + 1) 26 !$omp atomic 27 a = a - 3 28 !$omp atomic 29 a = a/(b + 1) 30 !$omp atomic 31 !ERROR: Invalid or missing operator in atomic update statement 32 a = a**4 33 !$omp atomic 34 !ERROR: Expected scalar variable on the LHS of atomic update assignment statement 35 !ERROR: Invalid or missing operator in atomic update statement 36 !ERROR: Expected scalar expression on the RHS of atomic update assignment statement 37 c = d 38 !$omp atomic 39 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 40 !ERROR: Invalid or missing operator in atomic update statement 41 l = a .LT. b 42 !$omp atomic 43 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 44 !ERROR: Invalid or missing operator in atomic update statement 45 l = a .LE. b 46 !$omp atomic 47 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 48 !ERROR: Invalid or missing operator in atomic update statement 49 l = a .EQ. b 50 !$omp atomic 51 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 52 !ERROR: Invalid or missing operator in atomic update statement 53 l = a .NE. b 54 !$omp atomic 55 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 56 !ERROR: Invalid or missing operator in atomic update statement 57 l = a .GE. b 58 !$omp atomic 59 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 60 !ERROR: Invalid or missing operator in atomic update statement 61 l = a .GT. b 62 !$omp atomic 63 m = m .AND. n 64 !$omp atomic 65 m = m .OR. n 66 !$omp atomic 67 m = m .EQV. n 68 !$omp atomic 69 m = m .NEQV. n 70 !$omp atomic update 71 a = a + (4*2) 72 !$omp atomic update 73 a = a*(b + 1) 74 !$omp atomic update 75 a = a - 3 76 !$omp atomic update 77 a = a/(b + 1) 78 !$omp atomic update 79 !ERROR: Invalid or missing operator in atomic update statement 80 a = a**4 81 !$omp atomic update 82 !ERROR: Expected scalar variable on the LHS of atomic update assignment statement 83 !ERROR: Invalid or missing operator in atomic update statement 84 !ERROR: Expected scalar expression on the RHS of atomic update assignment statement 85 c = c//d 86 !$omp atomic update 87 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 88 !ERROR: Invalid or missing operator in atomic update statement 89 l = a .LT. b 90 !$omp atomic update 91 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 92 !ERROR: Invalid or missing operator in atomic update statement 93 l = a .LE. b 94 !$omp atomic update 95 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 96 !ERROR: Invalid or missing operator in atomic update statement 97 l = a .EQ. b 98 !$omp atomic update 99 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 100 !ERROR: Invalid or missing operator in atomic update statement 101 l = a .GE. b 102 !$omp atomic update 103 !ERROR: Atomic update statement should be of form `l = l operator expr` OR `l = expr operator l` 104 !ERROR: Invalid or missing operator in atomic update statement 105 l = a .GT. b 106 !$omp atomic update 107 m = m .AND. n 108 !$omp atomic update 109 m = m .OR. n 110 !$omp atomic update 111 m = m .EQV. n 112 !$omp atomic update 113 m = m .NEQV. n 114 !$omp end parallel 115end program OmpAtomic 116