! { dg-do run } module m integer :: x = 6 integer :: w, y target :: y contains function foo () integer, pointer :: foo if (w /= 0) & error stop foo => y end end module program main use m implicit none integer :: v, r !$omp atomic x = min (8, x) !$omp atomic read v = x if (v /= 6) & error stop !$omp atomic compare if (x == 6) x = 7 !$omp atomic read v = x if (v /= 7) & error stop !$omp atomic x = min (x, 4) !$omp atomic read v = x if (v /= 4) & error stop !$omp atomic capture x = max(x, 8) v = x if (v /= 8) & error stop !$omp atomic read v = x if (x /= 8) & error stop !$omp atomic capture v = x x = max (12, x) if (v /= 8) & error stop !$omp atomic read v = x if (v /= 12) & error stop !$omp atomic capture v = x x = max(4, x) if (v /= 12) & error stop !$omp atomic read v = x if (v /= 12) & error stop !$omp atomic capture compare if (x == 4) then x = 4 else v = x endif if (v /= 12) & error stop !$omp atomic write x = -32 !$omp atomic capture seq_cst fail(relaxed) x = max(x, 12_8) v = x if (v /= 12) & error stop !$omp atomic read v = x if (v /= 12) & error stop !$omp atomic compare if (x == 12) x = 16 !$omp atomic read v = x if (v /= 16) & error stop r = 57 !$omp atomic compare capture if (x == 16) then x = r + 7 else v = x endif if (v /= 16) & error stop !$omp atomic read v = x if (v /= 64) & error stop !$omp atomic compare capture v = x if (x == 64) x = 16 if (v /= 64) & error stop !$omp atomic read v = x if (v /= 16) & error stop !$omp atomic capture, update, compare seq_cst fail(acquire) v = x if (x == 73_8 - r) x = 12_2 if (v /= 16) & error stop !$omp atomic read v = x if (v /= 12) & error stop !$omp atomic update, compare, capture if (x == 69_2 - r) x = 6_8 v = x if (v /= 6) & error stop !$omp atomic read v = x if (v /= 6) & error stop !$omp atomic x = min(x, 8) !$omp atomic read v = x if (v /= 6) & error stop !$omp atomic compare if (x == 6) x = 8 !$omp atomic read v = x if (v /= 8) & error stop !$omp atomic x = min(4,x) !$omp atomic read v = x if (v /= 4) & error stop !$omp atomic capture x = max(8_2, x) v = x if (v /= 8) & error stop !$omp atomic read v = x if (v /= 8) & error stop !$omp atomic capture v = x x = max(12_1, x) if (v /= 8) & error stop !$omp atomic read v = x if (v /= 12) & error stop !$omp atomic capture v = x x = max(x, 4_1) if (v /= 12) & error stop !$omp atomic read v = x if (v /= 12) & error stop !$omp atomic write x = -32 !$omp atomic capture ,seq_cst fail ( relaxed ) x = max(10_1 + 2_8, x) v = x !$omp end atomic if (v /= 12) & error stop !$omp atomic read v = x if (v /= 12) & error stop !$omp atomic compare if (x == 12) x = 16 !$omp atomic read v = x if (v /= 16) & error stop r = 57 !$omp atomic compare capture if (x == 15) x = r + 7; v = x if (v /= 16) & error stop !$omp atomic read v = x if (v /= 16) & error stop !$omp atomic capture, update, compare seq_cst fail(acquire) v = x; if (x == 73_8 - r) x = 12_8 !$omp end atomic if (v /= 16) & error stop !$omp atomic read v = x if (v /= 12) & error stop !$omp atomic update, compare, capture if (x == 69_2 - r) x = 6_1; v = x if (v /= 6) & error stop !$omp atomic read v = x if (v /= 6) & error stop v = 24 !$omp atomic compare capture if (x == 12) then; x = 16; else; v = x; endif if (v /= 6) & error stop v = 32 !$omp atomic read v = x if (v /= 6) & error stop v = 147 !$omp atomic capture compare if (x == 6) then; x = 57; else; v = x; endif if (v /= 147) & error stop !$omp atomic read v = x if (v /= 57) & error stop !$omp atomic update, compare, weak, seq_cst, fail (relaxed) if (x == 137) x = 174 !$omp atomic read v = x if (v /= 57) & error stop !$omp atomic compare fail (relaxed) if (x == 57_2) x = 6_8 !$omp atomic read v = x if (v /= 6) & error stop v = -5 !$omp atomic capture compare if (x == 17) then; x = 25; else; v = x; endif if (v /= 6) & error stop !$omp atomic read v = x if (v /= 6) & error stop v = 15 !$omp atomic capture compare if (x == 6) then; x = 23; else; v = x; endif if (v /= 15) & error stop !$omp atomic read v = x if (v /= 23) & error stop w = 1 !$omp atomic compare capture ! if (x == 23) then; x = 57; else; foo () = x; endif ! OpenMP 6 if (x == 23) then; x = 57; else; y = x; endif !$omp atomic read v = x if (v /= 57) & error stop !$omp atomic capture update compare ! if (x == 57) then; x = 23; else; foo () = x; endif ! OpenMP 6 if (x == 57) then; x = 23; else; y = x; endif !$omp atomic read v = x if (v /= 23) & error stop w = 0 !$omp atomic compare capture ! if (x == 24) then; x = 57; else; foo () = x; endif ! OpenMP 6 if (x == 24) then; x = 57; else; y = x; endif if (y /= 23) & error stop !$omp atomic read v = x if (v /= 23) & error stop y = -5 !$omp atomic capture update compare if (x == 57) then x = 27 else ! foo () = x ! OpenMP 6 y = x end if !$omp end atomic if (y /= 23) & error stop !$omp atomic read v = x if (v /= 23) & error stop end