xref: /llvm-project/flang/test/Semantics/doconcurrent06.f90 (revision 6c1ac141d3c98af9738bc77fcb55602cbff7751f)
1*6c1ac141SIvan Zhechev! RUN: %python %S/test_errors.py %s %flang_fc1
264ab3302SCarolineConcatto! C1167 -- An exit-stmt shall not appear within a DO CONCURRENT construct if
364ab3302SCarolineConcatto! it belongs to that construct or an outer construct.
464ab3302SCarolineConcatto
564ab3302SCarolineConcattosubroutine do_concurrent_test1(n)
664ab3302SCarolineConcatto  implicit none
764ab3302SCarolineConcatto  integer :: i1,i2,i3,i4,i5,i6,n
864ab3302SCarolineConcatto  mytest1: if (n>0) then
964ab3302SCarolineConcatto  nc1:       do concurrent(i1=1:n)
1064ab3302SCarolineConcatto  nc2:         do i2=1,n
1164ab3302SCarolineConcatto  nc3:           do concurrent(i3=1:n)
1264ab3302SCarolineConcatto  nc4:             do i4=1,n
1364ab3302SCarolineConcatto  nc5:               do concurrent(i5=1:n)
1464ab3302SCarolineConcatto  nc6:                 do i6=1,n
1564ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
1664ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
1764ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
1864ab3302SCarolineConcatto                         if (i6==10) exit mytest1
1964ab3302SCarolineConcatto                       end do nc6
2064ab3302SCarolineConcatto                     end do nc5
2164ab3302SCarolineConcatto                   end do nc4
2264ab3302SCarolineConcatto                 end do nc3
2364ab3302SCarolineConcatto               end do nc2
2464ab3302SCarolineConcatto             end do nc1
2564ab3302SCarolineConcatto           end if mytest1
2664ab3302SCarolineConcattoend subroutine do_concurrent_test1
2764ab3302SCarolineConcatto
2864ab3302SCarolineConcattosubroutine do_concurrent_test2(n)
2964ab3302SCarolineConcatto  implicit none
3064ab3302SCarolineConcatto  integer :: i1,i2,i3,i4,i5,i6,n
3164ab3302SCarolineConcatto  mytest2: if (n>0) then
3264ab3302SCarolineConcatto  nc1:       do concurrent(i1=1:n)
3364ab3302SCarolineConcatto  nc2:         do i2=1,n
3464ab3302SCarolineConcatto  nc3:           do concurrent(i3=1:n)
3564ab3302SCarolineConcatto  nc4:             do i4=1,n
3664ab3302SCarolineConcatto  nc5:               do concurrent(i5=1:n)
3764ab3302SCarolineConcatto  nc6:                 do i6=1,n
3864ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
3964ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
4064ab3302SCarolineConcatto                         if (i6==10) exit nc3
4164ab3302SCarolineConcatto                       end do nc6
4264ab3302SCarolineConcatto                     end do nc5
4364ab3302SCarolineConcatto                   end do nc4
4464ab3302SCarolineConcatto                 end do nc3
4564ab3302SCarolineConcatto               end do nc2
4664ab3302SCarolineConcatto             end do nc1
4764ab3302SCarolineConcatto           end if mytest2
4864ab3302SCarolineConcattoend subroutine do_concurrent_test2
4964ab3302SCarolineConcatto
5064ab3302SCarolineConcattosubroutine do_concurrent_test3(n)
5164ab3302SCarolineConcatto  implicit none
5264ab3302SCarolineConcatto  integer :: i1,i2,i3,i4,i5,i6,n
5364ab3302SCarolineConcatto  mytest3: if (n>0) then
5464ab3302SCarolineConcatto  nc1:       do concurrent(i1=1:n)
5564ab3302SCarolineConcatto  nc2:         do i2=1,n
5664ab3302SCarolineConcatto  nc3:           do concurrent(i3=1:n)
5764ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
5864ab3302SCarolineConcatto                   if (i3==4) exit nc2
5964ab3302SCarolineConcatto  nc4:             do i4=1,n
6064ab3302SCarolineConcatto  nc5:               do concurrent(i5=1:n)
6164ab3302SCarolineConcatto  nc6:                 do i6=1,n
6264ab3302SCarolineConcatto                         if (i6==10) print *, "hello"
6364ab3302SCarolineConcatto                       end do nc6
6464ab3302SCarolineConcatto                     end do nc5
6564ab3302SCarolineConcatto                   end do nc4
6664ab3302SCarolineConcatto                 end do nc3
6764ab3302SCarolineConcatto               end do nc2
6864ab3302SCarolineConcatto             end do nc1
6964ab3302SCarolineConcatto           end if mytest3
7064ab3302SCarolineConcattoend subroutine do_concurrent_test3
71