llvm-project/flang/test/Semantics/omp-nested-master.f90

154 lines
3.8 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! Various checks with the nesting of MASTER construct
program omp_nest_master
integer i, k, j
k = 0;
!$omp do
do i = 1, 10
k = k + 1
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
!$omp master
j = j -1
!$omp end master
end do
!$omp sections
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
!$omp master
do i = 1, 10
k = k + 1
end do
!$omp end master
!$omp end sections
!$omp single
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
!$omp master
do i = 1, 10
k = k + 1
end do
!$omp end master
!$omp end single
!$omp task
do i = 1, 10
k = k + 1
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
!$omp master
j = j -1
!$omp end master
end do
!$omp end task
!$omp taskloop
do i = 1, 10
k = k + 1
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
!$omp master
j = j -1
!$omp end master
end do
!$omp end taskloop
!$omp target parallel do simd
do i = 1, 10
k = k + 1
!ERROR: The only OpenMP constructs that can be encountered during execution of a 'SIMD' region are the `ATOMIC` construct, the `LOOP` construct, the `SIMD` construct and the `ORDERED` construct with the `SIMD` clause.
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
!$omp master
j = j -1
!$omp end master
end do
!$omp end target parallel do simd
!$omp critical
do i = 1, 10
k = k + 1
!$omp master
j = j -1
!$omp end master
end do
!$omp end critical
!$omp ordered
do i = 1, 10
k = k + 1
!$omp master
j = j -1
!$omp end master
end do
!$omp end ordered
!$omp ordered
do i = 1, 10
!ERROR: TEAMS region can only be strictly nested within the implicit parallel region or TARGET region
!$omp teams
!$omp distribute
do k =1, 10
print *, "hello"
!$omp master
j = j -1
!$omp end master
end do
!$omp end distribute
!$omp end teams
end do
!$omp end ordered
!$omp critical
do i = 1, 10
!ERROR: TEAMS region can only be strictly nested within the implicit parallel region or TARGET region
!$omp teams
!$omp distribute
do k =1, 10
print *, "hello"
!$omp master
j = j -1
!$omp end master
end do
!$omp end distribute
!$omp end teams
end do
!$omp end critical
!$omp taskloop
do i = 1, 10
!ERROR: TEAMS region can only be strictly nested within the implicit parallel region or TARGET region
!$omp teams
!$omp distribute
do k =1, 10
print *, "hello"
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
!$omp master
j = j -1
!$omp end master
end do
!$omp end distribute
!$omp end teams
end do
!$omp end taskloop
!$omp task
do i = 1, 10
!ERROR: TEAMS region can only be strictly nested within the implicit parallel region or TARGET region
!$omp teams
!$omp distribute
do k =1, 10
print *, "hello"
!ERROR: `MASTER` region may not be closely nested inside of `WORKSHARING`, `LOOP`, `TASK`, `TASKLOOP`, or `ATOMIC` region.
!$omp master
j = j -1
!$omp end master
end do
!$omp end distribute
!$omp end teams
end do
!$omp end task
end program omp_nest_master