! 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

