| ! { dg-do compile } |
| |
| module m |
| implicit none |
| integer x |
| real d |
| |
| contains |
| |
| real function foo (y, e, f) |
| integer :: y |
| real v, e |
| real(8) :: f |
| !$omp atomic compare compare ! { dg-error "Duplicated 'compare' clause" } |
| if (x == y) x = d |
| !$omp atomic compare fail(seq_cst) fail(seq_cst) ! { dg-error "Duplicated 'fail' clause" } |
| if (x == y) x = d |
| !$omp atomic compare,fail(seq_cst),fail(relaxed) ! { dg-error "Duplicated 'fail' clause" } |
| if (x == y) x = d |
| !$omp atomic compare weak weak ! { dg-error "Duplicated 'weak' clause" } |
| if (x == y) x = d |
| !$omp atomic read capture ! { dg-error "CAPTURE clause is incompatible with READ or WRITE" } |
| v = d |
| !$omp atomic capture, write ! { dg-error "CAPTURE clause is incompatible with READ or WRITE" } |
| d = v; v = v + 1 ! { dg-error "Unexpected ..OMP ATOMIC statement" "" { target *-*-* } .-1 } |
| foo = v |
| end |
| |
| real function bar (y, e, f) |
| integer :: y |
| real v, e |
| real(8) :: f |
| !$omp atomic read compare ! { dg-error "COMPARE clause is incompatible with READ or WRITE" } |
| if (x == y) x = d |
| !$omp atomic compare, write ! { dg-error "COMPARE clause is incompatible with READ or WRITE" } |
| if (x == y) x = d |
| !$omp atomic read fail(seq_cst) ! { dg-error "FAIL clause is incompatible with READ or WRITE" } |
| v = d |
| !$omp atomic fail(relaxed), write ! { dg-error "FAIL clause is incompatible with READ or WRITE" } |
| d = v |
| !$omp atomic fail(relaxed) update ! { dg-error "FAIL clause requiries either the COMPARE clause or using the intrinsic MIN/MAX procedure" } |
| d = d + 3.0 |
| !$omp atomic fail(relaxed) ! { dg-error "FAIL clause requiries either the COMPARE clause or using the intrinsic MIN/MAX procedure" } |
| d = d + 3.0 |
| !$omp atomic capture fail(relaxed) ! { dg-error "FAIL clause requiries either the COMPARE clause or using the intrinsic MIN/MAX procedure" } |
| v = d; d = d + 3.0 |
| !$omp atomic read weak ! { dg-error "WEAK clause requires COMPARE clause" } |
| v = d |
| !$omp atomic weak, write ! { dg-error "WEAK clause requires COMPARE clause" } |
| d = v |
| !$omp atomic weak update ! { dg-error "WEAK clause requires COMPARE clause" } |
| d = d + 3.0 |
| !$omp atomic weak ! { dg-error "WEAK clause requires COMPARE clause" } |
| d = d + 3.0 |
| !$omp atomic capture weak ! { dg-error "WEAK clause requires COMPARE clause" } |
| d = d + 3.0; v = d |
| !$omp atomic capture |
| d = d + 3.0; v = x ! { dg-error "capture statement reads from different variable than update statement writes" } |
| !$omp atomic compare fail ! { dg-error "Expected '\\\(' after 'fail'" } |
| if (x == y) x = d |
| !$omp atomic compare fail( ! { dg-error "Expected SEQ_CST, ACQUIRE or RELAXED" } |
| if (x == y) x = d |
| !$omp atomic compare fail() ! { dg-error "Expected SEQ_CST, ACQUIRE or RELAXED" } |
| if (x == y) x = d |
| !$omp atomic compare fail(foobar) ! { dg-error "Expected SEQ_CST, ACQUIRE or RELAXED" } |
| if (x == y) x = d |
| !$omp atomic compare fail(acq_rel) ! { dg-error "Expected SEQ_CST, ACQUIRE or RELAXED" } |
| if (x == y) x = d |
| !$omp atomic compare fail(release) ! { dg-error "Expected SEQ_CST, ACQUIRE or RELAXED" } |
| if (x == y) x = d |
| !$omp atomic compare fail(seq_cst ! { dg-error "Failed to match clause" } |
| if (x == y) x = d |
| bar = v |
| end |
| |
| subroutine foobar |
| implicit none |
| integer :: i, j, k |
| |
| !$omp atomic compare write ! { dg-error "COMPARE clause is incompatible with READ or WRITE" } |
| if (i == 1) i = 5 |
| |
| !$omp atomic compare |
| if (k == 5) i = 7 ! { dg-error "For !.OMP ATOMIC COMPARE, the first operand in comparison at .1. must be the variable 'i' that the update statement writes into at .2." } |
| |
| !$omp atomic compare |
| if (j == i) i = 8 ! { dg-error "For !.OMP ATOMIC COMPARE, the first operand in comparison at .1. must be the variable 'i' that the update statement writes into at .2." } |
| |
| !$omp atomic compare |
| if (i == 5) i = 8 |
| |
| !$omp atomic compare |
| if (5 == i) i = 8 ! { dg-error "Expected scalar intrinsic variable at .1. in atomic comparison" } |
| |
| !$omp atomic compare |
| if (i == 5) i = i + 8 ! { dg-error "20: expr in !.OMP ATOMIC COMPARE assignment var = expr must be scalar and cannot reference var" } |
| |
| end subroutine |
| end module |