omp_do1.f90   [plain text]


! { dg-do compile }
! { dg-options "-fopenmp -std=gnu" }
subroutine foo
  integer :: i, j
  integer, dimension (30) :: a
  double precision :: d
  i = 0
!$omp do private (i)
  do 100 ! { dg-error "cannot be a DO WHILE or DO without loop control" }
    if (i .gt. 0) exit ! { dg-error "EXIT statement" }
100 i = i + 1
  i = 0
!$omp do private (i)
  do ! { dg-error "cannot be a DO WHILE or DO without loop control" }
    if (i .gt. 0) exit ! { dg-error "EXIT statement" }
    i = i + 1
  end do
  i = 0
!$omp do private (i)
  do 200 while (i .lt. 4) ! { dg-error "cannot be a DO WHILE or DO without loop control" }
200 i = i + 1
!$omp do private (i)
  do while (i .lt. 8) ! { dg-error "cannot be a DO WHILE or DO without loop control" }
    i = i + 1
  end do
!$omp do
  do 300 d = 1, 30, 6 ! { dg-warning "Obsolete: REAL DO loop iterator" }
    i = d
300 a(i) = 1
!$omp do
  do d = 1, 30, 5 ! { dg-warning "Obsolete: REAL DO loop iterator" }
    i = d
    a(i) = 2
  end do
!$omp do
  do i = 1, 30
    if (i .eq. 16) exit ! { dg-error "EXIT statement" }
  end do
!$omp do
outer: do i = 1, 30
    do j = 5, 10
      if (i .eq. 6 .and. j .eq. 7) exit outer ! { dg-error "EXIT statement" }
    end do
  end do outer
last: do i = 1, 30
!$omp parallel
    if (i .eq. 21) exit last ! { dg-error "leaving OpenMP structured block" }
!$omp end parallel
  end do last
!$omp parallel do shared (i)
  do i = 1, 30, 2 ! { dg-error "iteration variable present on clause" }
    a(i) = 5
  end do
!$omp end parallel do
end subroutine
! { dg-error "iteration variable must be of type integer" "" { target *-*-* } 27 }
! { dg-error "iteration variable must be of type integer" "" { target *-*-* } 31 }