xref: /llvm-project/flang/test/Semantics/doconcurrent05.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 :: n
864ab3302SCarolineConcatto  integer :: j,k
964ab3302SCarolineConcatto  mydoc: do concurrent(j=1:n)
1064ab3302SCarolineConcatto  mydo:    do k=1,n
1164ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
1264ab3302SCarolineConcatto             if (k==5) exit mydoc
1364ab3302SCarolineConcatto             if (j==10) exit mydo
1464ab3302SCarolineConcatto           end do mydo
1564ab3302SCarolineConcatto         end do mydoc
1664ab3302SCarolineConcattoend subroutine do_concurrent_test1
1764ab3302SCarolineConcatto
1864ab3302SCarolineConcattosubroutine do_concurrent_test2(n)
1964ab3302SCarolineConcatto  implicit none
2064ab3302SCarolineConcatto  integer :: j,k,n
2164ab3302SCarolineConcatto  mydoc: do concurrent(j=1:n)
2264ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
2364ab3302SCarolineConcatto           if (k==5) exit
2464ab3302SCarolineConcatto         end do mydoc
2564ab3302SCarolineConcattoend subroutine do_concurrent_test2
2664ab3302SCarolineConcatto
2764ab3302SCarolineConcattosubroutine do_concurrent_test3(n)
2864ab3302SCarolineConcatto  implicit none
2964ab3302SCarolineConcatto  integer :: j,k,n
3064ab3302SCarolineConcatto  mytest3: if (n>0) then
3164ab3302SCarolineConcatto  mydoc:    do concurrent(j=1:n)
3264ab3302SCarolineConcatto              do k=1,n
3364ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
3464ab3302SCarolineConcatto                if (j==10) exit mytest3
3564ab3302SCarolineConcatto              end do
3664ab3302SCarolineConcatto            end do mydoc
3764ab3302SCarolineConcatto          end if mytest3
3864ab3302SCarolineConcattoend subroutine do_concurrent_test3
3964ab3302SCarolineConcatto
4064ab3302SCarolineConcattosubroutine do_concurrent_test4(n)
4164ab3302SCarolineConcatto  implicit none
4264ab3302SCarolineConcatto  integer :: j,k,n
4364ab3302SCarolineConcatto  mytest4: if (n>0) then
4464ab3302SCarolineConcatto  mydoc:    do concurrent(j=1:n)
4564ab3302SCarolineConcatto              do concurrent(k=1:n)
4664ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
4764ab3302SCarolineConcatto                if (k==5) exit
4864ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
4964ab3302SCarolineConcatto!ERROR: EXIT must not leave a DO CONCURRENT statement
5064ab3302SCarolineConcatto                if (j==10) exit mytest4
5164ab3302SCarolineConcatto              end do
5264ab3302SCarolineConcatto            end do mydoc
5364ab3302SCarolineConcatto          end if mytest4
5464ab3302SCarolineConcattoend subroutine do_concurrent_test4
55