| !REQUIRES: openmp_runtime |
| !RUN: %python %S/../test_errors.py %s %flang %openmp_flags -fopenmp -fopenmp-version=60 |
| |
| module m |
| use omp_lib |
| |
| implicit none |
| ! Not in omp_lib yet. |
| integer, parameter :: omp_not_impex = 0 |
| integer, parameter :: omp_import = 1 |
| integer, parameter :: omp_export = 2 |
| integer, parameter :: omp_impex = 3 |
| |
| contains |
| |
| subroutine f00 |
| !$omp taskgraph |
| !ERROR: Only task-generating constructs are allowed inside TASKGRAPH region |
| !$omp parallel |
| !$omp end parallel |
| !$omp end taskgraph |
| end |
| |
| subroutine f01 |
| !$omp taskgraph |
| !$omp task |
| !Non-task-generating constructs are ok if contained in an encountered task. |
| !No diagnostic expected. |
| !$omp parallel |
| !$omp end parallel |
| !$omp end task |
| !$omp end taskgraph |
| end |
| |
| subroutine f02 |
| !$omp taskgraph |
| !ERROR: Transparent replayable tasks are not allowed in a TASKGRAPH region |
| !$omp task transparent |
| !$omp end task |
| !$omp end taskgraph |
| |
| !$omp taskgraph |
| !Not a transparent task. |
| !No diagnostic expected. |
| !$omp task transparent(omp_not_impex) |
| !$omp end task |
| !$omp end taskgraph |
| |
| !$omp taskgraph |
| !Ok: transparent, but not replayable task. |
| !No diagnostic expected. |
| !$omp task replayable(.false.) transparent |
| !$omp end task |
| !$omp end taskgraph |
| end |
| |
| subroutine f03 |
| integer(kind=omp_event_handle_kind) :: event |
| |
| !$omp taskgraph |
| !ERROR: Detachable replayable tasks are not allowed in a TASKGRAPH region |
| !$omp task detach(event) |
| !$omp end task |
| !$omp end taskgraph |
| |
| !$omp taskgraph |
| !Ok: task is detachable, but not replayable. |
| !No diagnostic expected |
| !$omp task detach(event) replayable(.false.) |
| !$omp end task |
| !$omp end taskgraph |
| end |
| |
| subroutine f04 |
| !$omp taskgraph |
| !ERROR: Undeferred replayable tasks are not allowed in a TASKGRAPH region |
| !$omp task if(.false.) |
| !$omp end task |
| !$omp end taskgraph |
| |
| !$omp taskgraph |
| !Ok: task is undeferred, but not replayable. |
| !No diagnostic expected. |
| !$omp task if(.false.) replayable(.false.) |
| !$omp end task |
| !$omp end taskgraph |
| end |
| |
| subroutine f05 |
| integer :: i |
| |
| !$omp taskgraph |
| !ERROR: The NOGROUP clause must be specified on every construct in a TASKGRAPH region that could be enclosed in an implicit TASKGROUP |
| !$omp taskloop |
| do i = 1, 10 |
| enddo |
| !$omp end taskloop |
| !$omp end taskgraph |
| |
| !$omp taskgraph |
| !This also applies to non-replayable constructs |
| !ERROR: The NOGROUP clause must be specified on every construct in a TASKGRAPH region that could be enclosed in an implicit TASKGROUP |
| !$omp taskloop replayable(.false.) |
| do i = 1, 10 |
| enddo |
| !$omp end taskloop |
| !$omp end taskgraph |
| |
| !$omp taskgraph |
| !No diagnostic expected. |
| !$omp taskloop replayable(.false.) nogroup |
| do i = 1, 10 |
| enddo |
| !$omp end taskloop |
| !$omp end taskgraph |
| end |
| |
| end module |