! { dg-do compile }
! { dg-options "-fopenmp" }
! Test that errors are given for cases where there are constraints
! disallowing nonrectangular loops.
! Work-sharing loop disallows "schedule" and "ordered" clauses.
subroutine s1 (a1, a2)
  integer :: a1, a2
  integer :: i, j
  !$omp do collapse(2) schedule(static)  ! { dg-error "'schedule' clause may not appear on non-rectangular 'do'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp do collapse(2) schedule(static)  ! { dg-error "'schedule' clause may not appear on non-rectangular 'do'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp do collapse(2) ordered  ! { dg-error "'ordered' clause may not appear on non-rectangular 'do'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp do collapse(2) ordered  ! { dg-error "'ordered' clause may not appear on non-rectangular 'do'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  ! Derived constructs
  !$omp do simd collapse(2) schedule(static)  ! { dg-error "'schedule' clause may not appear on non-rectangular 'do'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp parallel do collapse(2) schedule(static)  ! { dg-error "'schedule' clause may not appear on non-rectangular 'do'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp parallel do simd collapse(2) schedule(static)  ! { dg-error "'schedule' clause may not appear on non-rectangular 'do'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp target parallel do collapse(2) schedule(static)  ! { dg-error "'schedule' clause may not appear on non-rectangular 'do'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp target parallel do collapse(2) schedule(static)  ! { dg-error "'schedule' clause may not appear on non-rectangular 'do'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
end subroutine
! Distribute construct disallows "dist_schedule" clause.
subroutine s2 (a1, a2)
  integer :: a1, a2
  integer :: i, j
  !$omp distribute collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp distribute collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  ! Derived constructs
  !$omp distribute simd collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp distribute parallel do collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp distribute parallel do simd collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp teams distribute collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp teams distribute simd collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp teams distribute parallel do collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp teams distribute parallel do simd collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp target teams distribute collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp target teams distribute simd collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp target teams distribute parallel do collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp target teams distribute parallel do simd collapse(2) dist_schedule(static)  ! { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
end subroutine
! Taskloop construct disallows "grainsize" and "num_tasks" clauses.
subroutine s3 (a1, a2)
  integer :: a1, a2
  integer :: i, j
  !$omp taskloop collapse(2) grainsize(4)  ! { dg-error "'grainsize' clause may not appear on non-rectangular 'taskloop'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp taskloop collapse(2) grainsize(4)  ! { dg-error "'grainsize' clause may not appear on non-rectangular 'taskloop'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  !$omp taskloop collapse(2) num_tasks(4)  ! { dg-error "'num_tasks' clause may not appear on non-rectangular 'taskloop'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp taskloop collapse(2) num_tasks(4)  ! { dg-error "'num_tasks' clause may not appear on non-rectangular 'taskloop'" }
  do i = 1, 16
    do j = i, 16
    end do
  end do
  ! Derived constructs
  !$omp taskloop simd collapse(2) grainsize(4)  ! { dg-error "'grainsize' clause may not appear on non-rectangular 'taskloop'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp masked taskloop collapse(2) grainsize(4)  ! { dg-error "'grainsize' clause may not appear on non-rectangular 'taskloop'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp masked taskloop simd collapse(2) grainsize(4)  ! { dg-error "'grainsize' clause may not appear on non-rectangular 'taskloop'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp parallel masked taskloop collapse(2) grainsize(4)  ! { dg-error "'grainsize' clause may not appear on non-rectangular 'taskloop'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
  !$omp parallel masked taskloop simd collapse(2) grainsize(4)  ! { dg-error "'grainsize' clause may not appear on non-rectangular 'taskloop'" }
  do i = 1, 16
    do j = 1, i
    end do
  end do
end subroutine
! TODO: not yet implemented
! The tile construct disallows all non-rectangular loops.