xref: /llvm-project/flang/test/Semantics/dosemantics02.f90 (revision 93dca9fbeea6c1f83223a621710eaf01c06350db)
16c1ac141SIvan Zhechev! RUN: %python %S/test_errors.py %s %flang_fc1
264ab3302SCarolineConcatto! C1121 -- any procedure referenced in a concurrent header must be pure
364ab3302SCarolineConcatto
464ab3302SCarolineConcatto! Also, check that the step expressions are not zero.  This is prohibited by
564ab3302SCarolineConcatto! Section 11.1.7.4.1, paragraph 1.
664ab3302SCarolineConcatto
764ab3302SCarolineConcattoSUBROUTINE do_concurrent_c1121(i,n)
864ab3302SCarolineConcatto  IMPLICIT NONE
964ab3302SCarolineConcatto  INTEGER :: i, n, flag
1064ab3302SCarolineConcatto  !ERROR: DO CONCURRENT mask expression may not reference impure procedure 'random'
1164ab3302SCarolineConcatto  DO CONCURRENT (i = 1:n, random() < 3)
1264ab3302SCarolineConcatto    flag = 3
1364ab3302SCarolineConcatto  END DO
1464ab3302SCarolineConcatto
1564ab3302SCarolineConcatto  CONTAINS
1664ab3302SCarolineConcatto    IMPURE FUNCTION random() RESULT(i)
1764ab3302SCarolineConcatto      INTEGER :: i
1864ab3302SCarolineConcatto      i = 35
1964ab3302SCarolineConcatto    END FUNCTION random
2064ab3302SCarolineConcattoEND SUBROUTINE do_concurrent_c1121
2164ab3302SCarolineConcatto
2264ab3302SCarolineConcattoSUBROUTINE s1()
2364ab3302SCarolineConcatto  INTEGER, PARAMETER :: constInt = 0
2464ab3302SCarolineConcatto
2564ab3302SCarolineConcatto  ! Warn on this one for backwards compatibility
26*93dca9fbSEmil Kieri  !WARNING: DO step expression should not be zero
2764ab3302SCarolineConcatto  DO 10 I = 1, 10, 0
2864ab3302SCarolineConcatto  10 CONTINUE
2964ab3302SCarolineConcatto
3064ab3302SCarolineConcatto  ! Warn on this one for backwards compatibility
31*93dca9fbSEmil Kieri  !WARNING: DO step expression should not be zero
3264ab3302SCarolineConcatto  DO 20 I = 1, 10, 5 - 5
3364ab3302SCarolineConcatto  20 CONTINUE
3464ab3302SCarolineConcatto
3564ab3302SCarolineConcatto  ! Error, no compatibility requirement for DO CONCURRENT
3664ab3302SCarolineConcatto  !ERROR: DO CONCURRENT step expression may not be zero
3764ab3302SCarolineConcatto  DO CONCURRENT (I = 1 : 10 : 0)
3864ab3302SCarolineConcatto  END DO
3964ab3302SCarolineConcatto
4064ab3302SCarolineConcatto  ! Error, this time with an integer constant
4164ab3302SCarolineConcatto  !ERROR: DO CONCURRENT step expression may not be zero
4264ab3302SCarolineConcatto  DO CONCURRENT (I = 1 : 10 : constInt)
4364ab3302SCarolineConcatto  END DO
4464ab3302SCarolineConcattoend subroutine s1
45