forked from OSchip/llvm-project
250 lines
5.7 KiB
Fortran
250 lines
5.7 KiB
Fortran
! RUN: %python %S/test_errors.py %s %flang -fopenmp
|
|
|
|
! OpenMP Version 5.0
|
|
! Check OpenMP construct validity for the following directives:
|
|
! 2.18.1 Cancel Construct
|
|
|
|
program main
|
|
integer :: i, N = 10
|
|
real :: a
|
|
|
|
!ERROR: CANCEL TASKGROUP directive is not closely nested inside TASK or TASKLOOP
|
|
!$omp cancel taskgroup
|
|
|
|
!ERROR: CANCEL SECTIONS directive is not closely nested inside SECTION or SECTIONS
|
|
!$omp cancel sections
|
|
|
|
!ERROR: CANCEL DO directive is not closely nested inside the construct that matches the DO clause type
|
|
!$omp cancel do
|
|
|
|
!ERROR: CANCEL PARALLEL directive is not closely nested inside the construct that matches the PARALLEL clause type
|
|
!$omp cancel parallel
|
|
|
|
!$omp parallel
|
|
!$omp sections
|
|
!$omp cancel sections
|
|
!$omp section
|
|
a = 3.14
|
|
!$omp end sections
|
|
!$omp end parallel
|
|
|
|
!$omp sections
|
|
!$omp section
|
|
!$omp cancel sections
|
|
a = 3.14
|
|
!$omp end sections
|
|
|
|
!$omp parallel
|
|
!ERROR: With SECTIONS clause, CANCEL construct cannot be closely nested inside PARALLEL construct
|
|
!$omp cancel sections
|
|
a = 3.14
|
|
!$omp end parallel
|
|
|
|
!$omp parallel sections
|
|
!$omp cancel sections
|
|
a = 3.14
|
|
!$omp end parallel sections
|
|
|
|
!$omp do
|
|
do i = 1, N
|
|
a = 3.14
|
|
!$omp cancel do
|
|
end do
|
|
!$omp end do
|
|
|
|
!$omp parallel do
|
|
do i = 1, N
|
|
a = 3.14
|
|
!$omp cancel do
|
|
end do
|
|
!$omp end parallel do
|
|
|
|
!$omp target
|
|
!$omp teams
|
|
!$omp distribute parallel do
|
|
do i = 1, N
|
|
a = 3.14
|
|
!$omp cancel do
|
|
end do
|
|
!$omp end distribute parallel do
|
|
!$omp end teams
|
|
!$omp end target
|
|
|
|
!$omp target
|
|
!$omp teams distribute parallel do
|
|
do i = 1, N
|
|
a = 3.14
|
|
!$omp cancel do
|
|
end do
|
|
!$omp end teams distribute parallel do
|
|
!$omp end target
|
|
|
|
!$omp target teams distribute parallel do
|
|
do i = 1, N
|
|
a = 3.14
|
|
!$omp cancel do
|
|
end do
|
|
!$omp end target teams distribute parallel do
|
|
|
|
!$omp target parallel do
|
|
do i = 1, N
|
|
a = 3.14
|
|
!$omp cancel do
|
|
end do
|
|
!$omp end target parallel do
|
|
|
|
!$omp parallel
|
|
do i = 1, N
|
|
a = 3.14
|
|
!ERROR: With DO clause, CANCEL construct cannot be closely nested inside PARALLEL construct
|
|
!$omp cancel do
|
|
end do
|
|
!$omp end parallel
|
|
|
|
!$omp parallel
|
|
do i = 1, N
|
|
a = 3.14
|
|
!$omp cancel parallel
|
|
end do
|
|
!$omp end parallel
|
|
|
|
!$omp target parallel
|
|
do i = 1, N
|
|
a = 3.14
|
|
!$omp cancel parallel
|
|
end do
|
|
!$omp end target parallel
|
|
|
|
!$omp target parallel do
|
|
do i = 1, N
|
|
a = 3.14
|
|
!ERROR: With PARALLEL clause, CANCEL construct cannot be closely nested inside TARGET PARALLEL DO construct
|
|
!$omp cancel parallel
|
|
end do
|
|
!$omp end target parallel do
|
|
|
|
!$omp do
|
|
do i = 1, N
|
|
a = 3.14
|
|
!ERROR: With PARALLEL clause, CANCEL construct cannot be closely nested inside DO construct
|
|
!$omp cancel parallel
|
|
end do
|
|
!$omp end do
|
|
|
|
contains
|
|
subroutine sub1()
|
|
!$omp task
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
!$omp end task
|
|
|
|
!$omp taskloop
|
|
do i = 1, N
|
|
!$omp parallel
|
|
!$omp end parallel
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
end do
|
|
!$omp end taskloop
|
|
|
|
!$omp taskloop nogroup
|
|
do i = 1, N
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
end do
|
|
|
|
!$omp parallel
|
|
!ERROR: With TASKGROUP clause, CANCEL construct must be closely nested inside TASK or TASKLOOP construct and CANCEL region must be closely nested inside TASKGROUP region
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
!$omp end parallel
|
|
|
|
!$omp do
|
|
do i = 1, N
|
|
!$omp task
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
!$omp end task
|
|
end do
|
|
!$omp end do
|
|
|
|
!$omp parallel
|
|
!$omp taskgroup
|
|
!$omp task
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
!$omp end task
|
|
!$omp end taskgroup
|
|
!$omp end parallel
|
|
|
|
!$omp parallel
|
|
!$omp task
|
|
!ERROR: With TASKGROUP clause, CANCEL construct must be closely nested inside TASK or TASKLOOP construct and CANCEL region must be closely nested inside TASKGROUP region
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
!$omp end task
|
|
!$omp end parallel
|
|
|
|
!$omp parallel
|
|
!$omp do
|
|
do i = 1, N
|
|
!$omp task
|
|
!ERROR: With TASKGROUP clause, CANCEL construct must be closely nested inside TASK or TASKLOOP construct and CANCEL region must be closely nested inside TASKGROUP region
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
!$omp end task
|
|
end do
|
|
!$omp end do
|
|
!$omp end parallel
|
|
|
|
!$omp target parallel
|
|
!$omp task
|
|
!ERROR: With TASKGROUP clause, CANCEL construct must be closely nested inside TASK or TASKLOOP construct and CANCEL region must be closely nested inside TASKGROUP region
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
!$omp end task
|
|
!$omp end target parallel
|
|
|
|
!$omp parallel
|
|
!$omp taskloop private(j) nogroup
|
|
do i = 1, N
|
|
!ERROR: With TASKGROUP clause, CANCEL construct must be closely nested inside TASK or TASKLOOP construct and CANCEL region must be closely nested inside TASKGROUP region
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
end do
|
|
!$omp end taskloop
|
|
!$omp end parallel
|
|
|
|
!$omp parallel
|
|
!$omp taskloop
|
|
do i = 1, N
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
end do
|
|
!$omp end taskloop
|
|
!$omp end parallel
|
|
|
|
!$omp parallel
|
|
!$omp taskgroup
|
|
!$omp taskloop nogroup
|
|
do i = 1, N
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
end do
|
|
!$omp end taskloop
|
|
!$omp end taskgroup
|
|
!$omp end parallel
|
|
|
|
!$omp target parallel
|
|
!$omp taskloop nogroup
|
|
do i = 1, N
|
|
!ERROR: With TASKGROUP clause, CANCEL construct must be closely nested inside TASK or TASKLOOP construct and CANCEL region must be closely nested inside TASKGROUP region
|
|
!$omp cancel taskgroup
|
|
a = 3.14
|
|
end do
|
|
!$omp end taskloop
|
|
!$omp end target parallel
|
|
end subroutine sub1
|
|
|
|
end program main
|