| ! RUN: %S/test_errors.sh %s %t %f18 -fopenmp |
| ! Semantic checks for OpenMP 5.0 standard 2.17.7 atomic Construct. |
| |
| use omp_lib |
| implicit none |
| integer :: i, j = 10, k=-100, a |
| ! 2.17.7.1 |
| ! Handled inside parser. |
| ! OpenMP constructs may not be encountered during execution of an atomic region |
| |
| ! 2.17.7.2 |
| ! At most one memory-order-clause may appear on the construct. |
| |
| !READ |
| !ERROR: At most one SEQ_CST clause can appear on the READ directive |
| !$omp atomic seq_cst seq_cst read |
| i = j |
| !ERROR: At most one SEQ_CST clause can appear on the READ directive |
| !$omp atomic read seq_cst seq_cst |
| i = j |
| !ERROR: At most one SEQ_CST clause can appear on the READ directive |
| !$omp atomic seq_cst read seq_cst |
| i = j |
| |
| !ERROR: At most one ACQUIRE clause can appear on the READ directive |
| !$omp atomic acquire acquire read |
| i = j |
| !ERROR: At most one ACQUIRE clause can appear on the READ directive |
| !$omp atomic read acquire acquire |
| i = j |
| !ERROR: At most one ACQUIRE clause can appear on the READ directive |
| !$omp atomic acquire read acquire |
| i = j |
| |
| !ERROR: At most one RELAXED clause can appear on the READ directive |
| !$omp atomic relaxed relaxed read |
| i = j |
| !ERROR: At most one RELAXED clause can appear on the READ directive |
| !$omp atomic read relaxed relaxed |
| i = j |
| !ERROR: At most one RELAXED clause can appear on the READ directive |
| !$omp atomic relaxed read relaxed |
| i = j |
| |
| !UPDATE |
| !ERROR: At most one SEQ_CST clause can appear on the UPDATE directive |
| !$omp atomic seq_cst seq_cst update |
| i = j |
| !ERROR: At most one SEQ_CST clause can appear on the UPDATE directive |
| !$omp atomic update seq_cst seq_cst |
| i = j |
| !ERROR: At most one SEQ_CST clause can appear on the UPDATE directive |
| !$omp atomic seq_cst update seq_cst |
| i = j |
| |
| !ERROR: At most one RELEASE clause can appear on the UPDATE directive |
| !$omp atomic release release update |
| i = j |
| !ERROR: At most one RELEASE clause can appear on the UPDATE directive |
| !$omp atomic update release release |
| i = j |
| !ERROR: At most one RELEASE clause can appear on the UPDATE directive |
| !$omp atomic release update release |
| i = j |
| |
| !ERROR: At most one RELAXED clause can appear on the UPDATE directive |
| !$omp atomic relaxed relaxed update |
| i = j |
| !ERROR: At most one RELAXED clause can appear on the UPDATE directive |
| !$omp atomic update relaxed relaxed |
| i = j |
| !ERROR: At most one RELAXED clause can appear on the UPDATE directive |
| !$omp atomic relaxed update relaxed |
| i = j |
| |
| !CAPTURE |
| !ERROR: At most one SEQ_CST clause can appear on the CAPTURE directive |
| !$omp atomic seq_cst seq_cst capture |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one SEQ_CST clause can appear on the CAPTURE directive |
| !$omp atomic capture seq_cst seq_cst |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one SEQ_CST clause can appear on the CAPTURE directive |
| !$omp atomic seq_cst capture seq_cst |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one RELEASE clause can appear on the CAPTURE directive |
| !$omp atomic release release capture |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one RELEASE clause can appear on the CAPTURE directive |
| !$omp atomic capture release release |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one RELEASE clause can appear on the CAPTURE directive |
| !$omp atomic release capture release |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one RELAXED clause can appear on the CAPTURE directive |
| !$omp atomic relaxed relaxed capture |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one RELAXED clause can appear on the CAPTURE directive |
| !$omp atomic capture relaxed relaxed |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one RELAXED clause can appear on the CAPTURE directive |
| !$omp atomic relaxed capture relaxed |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one ACQ_REL clause can appear on the CAPTURE directive |
| !$omp atomic acq_rel acq_rel capture |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one ACQ_REL clause can appear on the CAPTURE directive |
| !$omp atomic capture acq_rel acq_rel |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one ACQ_REL clause can appear on the CAPTURE directive |
| !$omp atomic acq_rel capture acq_rel |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one ACQUIRE clause can appear on the CAPTURE directive |
| !$omp atomic acquire acquire capture |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one ACQUIRE clause can appear on the CAPTURE directive |
| !$omp atomic capture acquire acquire |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !ERROR: At most one ACQUIRE clause can appear on the CAPTURE directive |
| !$omp atomic acquire capture acquire |
| i = j |
| j = k |
| !$omp end atomic |
| |
| !WRITE |
| !ERROR: At most one SEQ_CST clause can appear on the WRITE directive |
| !$omp atomic seq_cst seq_cst write |
| i = j |
| !ERROR: At most one SEQ_CST clause can appear on the WRITE directive |
| !$omp atomic write seq_cst seq_cst |
| i = j |
| !ERROR: At most one SEQ_CST clause can appear on the WRITE directive |
| !$omp atomic seq_cst write seq_cst |
| i = j |
| |
| !ERROR: At most one RELEASE clause can appear on the WRITE directive |
| !$omp atomic release release write |
| i = j |
| !ERROR: At most one RELEASE clause can appear on the WRITE directive |
| !$omp atomic write release release |
| i = j |
| !ERROR: At most one RELEASE clause can appear on the WRITE directive |
| !$omp atomic release write release |
| i = j |
| |
| !ERROR: At most one RELAXED clause can appear on the WRITE directive |
| !$omp atomic relaxed relaxed write |
| i = j |
| !ERROR: At most one RELAXED clause can appear on the WRITE directive |
| !$omp atomic write relaxed relaxed |
| i = j |
| !ERROR: At most one RELAXED clause can appear on the WRITE directive |
| !$omp atomic relaxed write relaxed |
| i = j |
| |
| !No atomic-clause |
| !ERROR: At most one RELAXED clause can appear on the ATOMIC directive |
| !$omp atomic relaxed relaxed |
| i = j |
| !ERROR: At most one SEQ_CST clause can appear on the ATOMIC directive |
| !$omp atomic seq_cst seq_cst |
| i = j |
| !ERROR: At most one RELEASE clause can appear on the ATOMIC directive |
| !$omp atomic release release |
| i = j |
| |
| ! 2.17.7.3 |
| ! At most one hint clause may appear on the construct. |
| |
| !ERROR: At most one HINT clause can appear on the READ directive |
| !$omp atomic hint(omp_sync_hint_speculative) hint(omp_sync_hint_speculative) read |
| i = j |
| !ERROR: At most one HINT clause can appear on the READ directive |
| !$omp atomic hint(omp_sync_hint_nonspeculative) read hint(omp_sync_hint_nonspeculative) |
| i = j |
| !ERROR: At most one HINT clause can appear on the READ directive |
| !$omp atomic read hint(omp_sync_hint_uncontended) hint (omp_sync_hint_uncontended) |
| i = j |
| !ERROR: At most one HINT clause can appear on the WRITE directive |
| !$omp atomic hint(omp_sync_hint_contended) hint(omp_sync_hint_speculative) write |
| i = j |
| !ERROR: At most one HINT clause can appear on the WRITE directive |
| !$omp atomic hint(omp_sync_hint_nonspeculative) write hint(omp_sync_hint_nonspeculative) |
| i = j |
| !ERROR: At most one HINT clause can appear on the WRITE directive |
| !$omp atomic write hint(omp_sync_hint_none) hint (omp_sync_hint_uncontended) |
| i = j |
| !ERROR: At most one HINT clause can appear on the WRITE directive |
| !$omp atomic hint(omp_sync_hint_contended) hint(omp_sync_hint_speculative) write |
| i = j |
| !ERROR: At most one HINT clause can appear on the WRITE directive |
| !$omp atomic hint(omp_sync_hint_nonspeculative) write hint(omp_sync_hint_nonspeculative) |
| i = j |
| !ERROR: At most one HINT clause can appear on the WRITE directive |
| !$omp atomic write hint(omp_sync_hint_none) hint (omp_sync_hint_uncontended) |
| i = j |
| !ERROR: At most one HINT clause can appear on the UPDATE directive |
| !$omp atomic hint(omp_sync_hint_contended) hint(omp_sync_hint_speculative) update |
| i = j |
| !ERROR: At most one HINT clause can appear on the UPDATE directive |
| !$omp atomic hint(omp_sync_hint_nonspeculative) update hint(omp_sync_hint_nonspeculative) |
| i = j |
| !ERROR: At most one HINT clause can appear on the UPDATE directive |
| !$omp atomic update hint(omp_sync_hint_none) hint (omp_sync_hint_uncontended) |
| i = j |
| !ERROR: At most one HINT clause can appear on the ATOMIC directive |
| !$omp atomic hint(omp_sync_hint_contended) hint(omp_sync_hint_speculative) |
| i = j |
| !ERROR: At most one HINT clause can appear on the ATOMIC directive |
| !$omp atomic hint(omp_sync_hint_none) hint(omp_sync_hint_nonspeculative) |
| i = j |
| !ERROR: At most one HINT clause can appear on the ATOMIC directive |
| !$omp atomic hint(omp_sync_hint_none) hint (omp_sync_hint_uncontended) |
| i = j |
| |
| !ERROR: At most one HINT clause can appear on the CAPTURE directive |
| !$omp atomic hint(omp_sync_hint_contended) hint(omp_sync_hint_speculative) capture |
| i = j |
| j = k |
| !$omp end atomic |
| !ERROR: At most one HINT clause can appear on the CAPTURE directive |
| !$omp atomic hint(omp_sync_hint_nonspeculative) capture hint(omp_sync_hint_nonspeculative) |
| i = j |
| j = k |
| !$omp end atomic |
| !ERROR: At most one HINT clause can appear on the CAPTURE directive |
| !$omp atomic capture hint(omp_sync_hint_none) hint (omp_sync_hint_uncontended) |
| i = j |
| j = k |
| !$omp end atomic |
| ! 2.17.7.4 |
| ! If atomic-clause is read then memory-order-clause must not be acq_rel or release. |
| |
| !ERROR: Clause ACQ_REL is not allowed if clause READ appears on the ATOMIC directive |
| !$omp atomic acq_rel read |
| i = j |
| !ERROR: Clause ACQ_REL is not allowed if clause READ appears on the ATOMIC directive |
| !$omp atomic read acq_rel |
| i = j |
| |
| !ERROR: Clause RELEASE is not allowed if clause READ appears on the ATOMIC directive |
| !$omp atomic release read |
| i = j |
| !ERROR: Clause RELEASE is not allowed if clause READ appears on the ATOMIC directive |
| !$omp atomic read release |
| i = j |
| |
| ! 2.17.7.5 |
| ! If atomic-clause is write then memory-order-clause must not be acq_rel or acquire. |
| |
| !ERROR: Clause ACQ_REL is not allowed if clause WRITE appears on the ATOMIC directive |
| !$omp atomic acq_rel write |
| i = j |
| !ERROR: Clause ACQ_REL is not allowed if clause WRITE appears on the ATOMIC directive |
| !$omp atomic write acq_rel |
| i = j |
| |
| !ERROR: Clause ACQUIRE is not allowed if clause WRITE appears on the ATOMIC directive |
| !$omp atomic acquire write |
| i = j |
| !ERROR: Clause ACQUIRE is not allowed if clause WRITE appears on the ATOMIC directive |
| !$omp atomic write acquire |
| i = j |
| |
| |
| ! 2.17.7.6 |
| ! If atomic-clause is update or not present then memory-order-clause must not be acq_rel or acquire. |
| |
| !ERROR: Clause ACQ_REL is not allowed if clause UPDATE appears on the ATOMIC directive |
| !$omp atomic acq_rel update |
| i = j |
| !ERROR: Clause ACQ_REL is not allowed if clause UPDATE appears on the ATOMIC directive |
| !$omp atomic update acq_rel |
| i = j |
| |
| !ERROR: Clause ACQUIRE is not allowed if clause UPDATE appears on the ATOMIC directive |
| !$omp atomic acquire update |
| i = j |
| |
| !ERROR: Clause ACQUIRE is not allowed if clause UPDATE appears on the ATOMIC directive |
| !$omp atomic update acquire |
| i = j |
| |
| !ERROR: Clause ACQ_REL is not allowed on the ATOMIC directive |
| !$omp atomic acq_rel |
| i = j |
| |
| !ERROR: Clause ACQUIRE is not allowed on the ATOMIC directive |
| !$omp atomic acquire |
| i = j |
| end program |
| |