blob: e5f675f87d9e2ba66091d5b6d1278b6ee8581232 [file] [log] [blame]
! { 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