blob: 4347a7241be9470d227a4e699438d15bd163ca7b [file] [edit]
! RUN: %python %S/test_errors.py %s %flang_fc1 -Werror
!
! Check that repeated do-variable names in nested io-implied-do are diagnosed.
! Section 12.6.3 paragraph 7: The do-variable of an io-implied-do that is in
! another io-implied-do shall not appear as, nor be associated with, the
! do-variable of the containing io-implied-do.
module m
integer :: mk
end module
program test
use m, only: mk, mk_alias => mk
implicit none
integer :: matrix(10,10), vec(10), cube(5,5,5)
integer :: i, j, k, ei
equivalence(j, ei)
do i = 1, 10
do j = 1, 10
matrix(i,j) = 10*(i - 1) + j
end do
end do
vec = [(i, i=1,10)]
! OK: different do-variables
write(*,'(10i5)') ((matrix(i,j), j=1,10), i=1,10)
! Bad: j repeated in nested io-implied-do
!WARNING: I/O implied DO index 'j' appears in an enclosing I/O implied DO loop and should not have the same name [-Wio-implied-do-index-conflict]
write(*,'(10i5)') ((matrix(i,j), j=1,10), j=1,10)
! Bad: i repeated in nested io-implied-do
!WARNING: I/O implied DO index 'i' appears in an enclosing I/O implied DO loop and should not have the same name [-Wio-implied-do-index-conflict]
write(*,'(10i5)') ((matrix(i,j), i=1,10), i=1,10)
! OK: single (non-nested) io-implied-do
write(*,'(10i5)') (vec(j), j=1,10)
! OK: sibling (non-nested) implied-DOs reusing the same variable
write(*,'(10i5)') (vec(i), i=1,5), (vec(i), i=6,10)
! Bad: j repeated in nested io-implied-do (READ)
!WARNING: I/O implied DO index 'j' appears in an enclosing I/O implied DO loop and should not have the same name [-Wio-implied-do-index-conflict]
read(*,*) ((matrix(i,j), j=1,10), j=1,10)
! Bad: ei is associated with j via EQUIVALENCE
!WARNING: I/O implied DO index 'ei' should not be associated with do-variable 'j' of an enclosing I/O implied DO loop [-Wio-implied-do-index-conflict]
write(*,'(10i5)') ((matrix(i,ei), ei=1,10), j=1,10)
! Bad: USE-renamed mk_alias is the same variable as mk
!WARNING: I/O implied DO index 'mk_alias' should not be associated with do-variable 'mk' of an enclosing I/O implied DO loop [-Wio-implied-do-index-conflict]
write(*,'(10i5)') ((matrix(i,mk_alias), mk_alias=1,10), mk=1,10)
! Bad: triple nesting, k repeated at innermost level
!WARNING: I/O implied DO index 'k' appears in an enclosing I/O implied DO loop and should not have the same name [-Wio-implied-do-index-conflict]
write(*,*) (((cube(i,j,k), k=1,5), j=1,5), k=1,5)
! Bad: ASSOCIATE x is associated with j
associate(x => j)
!WARNING: I/O implied DO index 'x' should not be associated with do-variable 'j' of an enclosing I/O implied DO loop [-Wio-implied-do-index-conflict]
write(*,'(10i5)') ((matrix(i,x), x=1,10), j=1,10)
end associate
end program test