! RUN: %python %S/../test_symbols.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.7.1 Do Loop constructs.

!DEF: /OMP_CYCLE MainProgram
program OMP_CYCLE
  !$omp do  collapse(1)
  !DEF: /OMP_CYCLE/OtherConstruct1/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
  do i=0,10
    !REF: /OMP_CYCLE/OtherConstruct1/i
    if (i<1) cycle
    !DEF: /OMP_CYCLE/j (Implicit) ObjectEntity INTEGER(4)
    do j=0,10
      !DEF: /OMP_CYCLE/k (Implicit) ObjectEntity INTEGER(4)
      do k=0,10
        !REF: /OMP_CYCLE/OtherConstruct1/i
        !REF: /OMP_CYCLE/j
        !REF: /OMP_CYCLE/k
        print *, i, j, k
      end do
    end do
  end do
  !$omp end do

  !$omp do  collapse(1)
  !DEF: /OMP_CYCLE/OtherConstruct2/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
  do i=0,10
    !REF: /OMP_CYCLE/j
    do j=0,10
      !REF: /OMP_CYCLE/OtherConstruct2/i
      if (i<1) cycle
      !REF: /OMP_CYCLE/k
      do k=0,10
        !REF: /OMP_CYCLE/OtherConstruct2/i
        !REF: /OMP_CYCLE/j
        !REF: /OMP_CYCLE/k
        print *, i, j, k
      end do
    end do
  end do
  !$omp end do

  !$omp do  collapse(2)
  !DEF: /OMP_CYCLE/OtherConstruct3/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
  do i=0,10
    !DEF: /OMP_CYCLE/OtherConstruct3/j (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
    do j=0,10
      !REF: /OMP_CYCLE/k
      do k=0,10
        !REF: /OMP_CYCLE/OtherConstruct3/i
        if (i<1) cycle
        !REF: /OMP_CYCLE/OtherConstruct3/i
        !REF: /OMP_CYCLE/OtherConstruct3/j
        !REF: /OMP_CYCLE/k
        print *, i, j, k
      end do
    end do
  end do
  !$omp end do

  !$omp do  collapse(3)
  !DEF: /OMP_CYCLE/OtherConstruct4/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
  do i=0,10
    !DEF: /OMP_CYCLE/OtherConstruct4/j (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
    do j=0,10
      !DEF: /OMP_CYCLE/OtherConstruct4/k (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
      do k=0,10
        !REF: /OMP_CYCLE/OtherConstruct4/i
        if (i<1) cycle
        !REF: /OMP_CYCLE/OtherConstruct4/i
        !REF: /OMP_CYCLE/OtherConstruct4/j
        !REF: /OMP_CYCLE/OtherConstruct4/k
        print *, i, j, k
      end do
    end do
  end do
  !$omp end do

  !$omp do  collapse(3)
  !DEF: /OMP_CYCLE/OtherConstruct5/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
  foo:do i=0,10
    !DEF: /OMP_CYCLE/OtherConstruct5/j (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
    foo1:do j=0,10
      !DEF: /OMP_CYCLE/OtherConstruct5/k (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
      foo2:do k=0,10
        !REF: /OMP_CYCLE/OtherConstruct5/i
        if (i<1) cycle foo2
        !REF: /OMP_CYCLE/OtherConstruct5/i
        !REF: /OMP_CYCLE/OtherConstruct5/j
        !REF: /OMP_CYCLE/OtherConstruct5/k
        print *, i, j, k
      end do foo2
    end do foo1
  end do foo
  !$omp end do
end program OMP_CYCLE
