! RUN: %python %S/test_errors.py %s %flang -fopenmp ! OpenMP Version 4.5 ! 2.7.1 Loop Construct restrictions on single directive. program omp_do integer n integer i,j,k !$omp do do i=1,10 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do j=1,10 print *,"hello" end do !$omp end single end do !$omp end do !$omp parallel do do i=1,10 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do j=1,10 print *,"hello" end do !$omp end single end do !$omp end parallel do !$omp parallel do simd do i=1,10 !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: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do j=1,10 print *,"hello" end do !$omp end single end do !$omp end parallel do simd !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. !$omp distribute parallel do do i=1,10 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do j=1,10 print *,"hello" end do !$omp end single end do !$omp end distribute parallel do !ERROR: `DISTRIBUTE` region has to be strictly nested inside `TEAMS` region. !$omp distribute parallel do simd do i=1,10 !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: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do j=1,10 print *,"hello" end do !$omp end single end do !$omp end distribute parallel do simd !$omp target parallel do do i=1,10 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do j=1,10 print *,"hello" end do !$omp end single end do !$omp end target parallel do !$omp target parallel do simd do i=1,10 !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: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do j=1,10 print *,"hello" end do !$omp end single end do !$omp end target parallel do simd !$omp target teams distribute parallel do do i=1,10 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do j=1,10 print *,"hello" end do !$omp end single end do !$omp end target teams distribute parallel do !$omp target teams distribute parallel do simd do i=1,10 !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: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do j=1,10 print *,"hello" end do !$omp end single end do !$omp end target teams distribute parallel do simd !$omp do do i=1,10 !$omp task do j=1,10 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do k=1,10 print *,"hello" end do !$omp end single end do !$omp end task end do !$omp end do !$omp do do i=1,10 !$omp parallel do j=1,10 !$omp single do k=1,10 print *,"hello" end do !$omp end single end do !$omp end parallel end do !$omp end do !$omp do do i=1,10 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do j=1,10 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do k=1,10 print *,"hello" end do !$omp end single end do !$omp end single !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single do k=1,10 print *,"hello" end do !$omp end single !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp do do k=1,10 print *,"hello" end do !$omp end do end do !$omp end do !$omp parallel default(shared) !$omp do do i = 1, n !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single call work(i, 1) !$omp end single end do !$omp end do !$omp end parallel !$omp parallel default(shared) !$omp do do i = 1, n !$omp task do j=1,10 !ERROR: A worksharing region may not be closely nested inside a worksharing, explicit task, taskloop, critical, ordered, atomic, or master region !$omp single call work(i, 1) !$omp end single end do !$omp end task end do !$omp end do !$omp end parallel end program omp_do