! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp ! Check OpenMP 5.0 - 2.17.8 flush Construct ! Restriction - ! If memory-order-clause is release, acquire, or acq_rel, list items must not be specified on the flush directive. use omp_lib implicit none TYPE someStruct REAL :: rr end TYPE integer :: i, a, b real, DIMENSION(10) :: array TYPE(someStruct) :: structObj a = 1.0 !$omp parallel num_threads(4) !No list flushes all. if (omp_get_thread_num() == 1) THEN !$omp flush END IF array = (/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/) !Only memory-order-clauses. if (omp_get_thread_num() == 1) THEN ! Not allowed clauses. !ERROR: SEQ_CST clause is not allowed on the FLUSH directive !$omp flush seq_cst !ERROR: RELAXED clause is not allowed on the FLUSH directive !$omp flush relaxed ! Not allowed more than once. !ERROR: At most one ACQ_REL clause can appear on the FLUSH directive !$omp flush acq_rel acq_rel !ERROR: At most one RELEASE clause can appear on the FLUSH directive !$omp flush release release !ERROR: At most one ACQUIRE clause can appear on the FLUSH directive !$omp flush acquire acquire ! Mix of allowed and not allowed. !ERROR: SEQ_CST clause is not allowed on the FLUSH directive !$omp flush seq_cst acquire END IF array = (/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/) ! No memory-order-clause only list-items. if (omp_get_thread_num() == 2) THEN !$omp flush (a) !$omp flush (i, a, b) !$omp flush (array, structObj%rr) ! Too many flush with repeating list items. !$omp flush (i, a, b, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, b, b, b, b) !ERROR: No explicit type declared for 'notpresentitem' !$omp flush (notPresentItem) END IF array = (/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/) if (omp_get_thread_num() == 3) THEN !ERROR: If memory-order-clause is RELEASE, ACQUIRE, or ACQ_REL, list items must not be specified on the FLUSH directive !$omp flush acq_rel (array) !ERROR: If memory-order-clause is RELEASE, ACQUIRE, or ACQ_REL, list items must not be specified on the FLUSH directive !$omp flush acq_rel (array, a, i) array = (/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/) !ERROR: If memory-order-clause is RELEASE, ACQUIRE, or ACQ_REL, list items must not be specified on the FLUSH directive !$omp flush release (array) !ERROR: If memory-order-clause is RELEASE, ACQUIRE, or ACQ_REL, list items must not be specified on the FLUSH directive !$omp flush release (array, a) array = (/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/) !ERROR: If memory-order-clause is RELEASE, ACQUIRE, or ACQ_REL, list items must not be specified on the FLUSH directive !$omp flush acquire (array) !ERROR: If memory-order-clause is RELEASE, ACQUIRE, or ACQ_REL, list items must not be specified on the FLUSH directive !$omp flush acquire (array, a, structObj%rr) END IF !$omp end parallel !$omp parallel num_threads(4) array = (/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/) !$omp master !$omp flush (array) !$omp end master !$omp end parallel end