1! { dg-do compile }
2! { dg-options "-fopenmp" }
3module m
4  implicit none
5  integer :: x = 6
6end module m
7
8program main
9  use m
10  implicit none
11  integer v
12  !$omp atomic
13    x = x * 7 + 6       ! { dg-error "assignment must be var = var op expr or var = expr op var" }
14  !$omp atomic
15    x = ieor (x * 7, 6)       ! { dg-error "intrinsic arguments except one must not reference 'x'" }
16  !$omp atomic update
17    x = x - 8 + 6       ! { dg-error "var = var op expr not mathematically equivalent to var = var op \\(expr\\)" }
18  !$omp atomic
19    x = ior (ieor (x, 7), 2)       ! { dg-error "intrinsic arguments except one must not reference 'x'" }
20  !$omp atomic
21    x = x / 7 * 2       ! { dg-error "var = var op expr not mathematically equivalent to var = var op \\(expr\\)" }
22  !$omp atomic
23    x = x / 7 / 2       ! { dg-error "var = var op expr not mathematically equivalent to var = var op \\(expr\\)" }
24  !$omp atomic capture
25    v = x; x = x * 7 + 6   ! { dg-error "assignment must be var = var op expr or var = expr op var" }
26  !$omp atomic capture
27    v = x; x = ieor(x * 7, 6)   ! { dg-error "intrinsic arguments except one must not reference 'x'" }
28  !$omp atomic capture
29    v = x; x = x - 8 + 6   ! { dg-error "var = var op expr not mathematically equivalent to var = var op \\(expr\\)" }
30  !$omp atomic capture
31    v = x; x = ior (ieor(x, 7), 2)   ! { dg-error "intrinsic arguments except one must not reference 'x'" }
32  !$omp atomic capture
33    v = x; x = x / 7 * 2   ! { dg-error "var = var op expr not mathematically equivalent to var = var op \\(expr\\)" }
34  !$omp atomic capture
35    v = x; x = x / 7 / 2   ! { dg-error "var = var op expr not mathematically equivalent to var = var op \\(expr\\)" }
36  !$omp atomic capture
37    x = x * 7 + 6; v = x   ! { dg-error "assignment must be var = var op expr or var = expr op var" }
38  !$omp atomic capture
39    x = ieor(x * 7, 6); v = x   ! { dg-error "intrinsic arguments except one must not reference 'x'" }
40  !$omp atomic capture
41    x = x - 8 + 6; v = x   ! { dg-error "var = var op expr not mathematically equivalent to var = var op \\(expr\\)" }
42  !$omp atomic capture
43    x = ior(ieor(x, 7), 2); v = x   ! { dg-error "intrinsic arguments except one must not reference 'x'" }
44end
45