Jack Styles 671caef379
[Flang][OpenMP] Update relevant warnings to emit when OMP >= v5.2 (#144492)
There has been a number of deprecation warnings that have been added to
Flang, however these features are only deprecated when the OpenMP
Version being used is 5.2 or later. Previously, flang did not consider
the version with the warnings so would always be emitted.

Flang now ensures warnings are emitted for the appropriate version of
OpenMP, and tests are updated to reflect this change.
2025-06-18 14:35:53 +01:00

87 lines
3.0 KiB
Fortran

! REQUIRES: openmp_runtime
! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp-version=51
! 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.
!$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.
!$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