Eugene Epshteyn ab6cc6b7b3
[flang] Allow nested scopes for implied DO loops with DATA statements (#129410)
Previously, nested scopes for implied DO loops with DATA statements were
disallowed, which meant that the following code couldn't compile due to
re-use of `j` loop variable name:
    
    DATA (a(i),(b(i,j),j=1,3),(c(i,j),j=1,3),i=0,4)/
    
This change allows nested scopes implied DO loops, which allows the code
above to compile.

Tests modified to in accordance with this change:
Semantics/resolve40.f90, Semantics/symbol09.f90
2025-03-04 20:41:01 -05:00

99 lines
1.7 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1
subroutine s1
namelist /nl/x
block
!ERROR: NAMELIST statement is not allowed in a BLOCK construct
namelist /nl/y
end block
end
subroutine s2
open(12, file='nl.out')
!ERROR: Namelist group 'nl' not found
write(12, nml=nl)
end
subroutine s3
real :: x
open(12, file='nl.out')
!ERROR: 'x' is not the name of a namelist group
write(12, nml=x)
end
module m4
real :: x
namelist /nl/x
end
subroutine s4a
use m4
namelist /nl2/x
open(12, file='nl.out')
write(12, nml=nl)
write(12, nml=nl2)
end
subroutine s4b
use m4
real :: y
!ERROR: 'nl' is already declared in this scoping unit
namelist /nl/y
end
subroutine s5
namelist /nl/x
integer x
end
subroutine s6
!ERROR: 's6' is not a variable
namelist /nl/ s6
!ERROR: 'f' is not a variable
namelist /nl/ f
contains
integer function f()
f = 1
end
end
subroutine s7
real x
!ERROR: 'x' is not a variable
namelist /nl/ x
external x
end
subroutine s8
data x/1.0/
!ERROR: The type of 'x' has already been implicitly declared
integer x
end
subroutine s9
real :: x(2,2)
! Nested implied DO loops have their own scope
data ((x(i,j),j=1,2),(x(i,j),j=1,2),i=1,2)/8*0.0/
end
module m10
integer :: x
public :: nl
namelist /nl/ x
end
subroutine s11
integer :: nl2
!ERROR: 'nl2' is already declared in this scoping unit
namelist /nl2/x
namelist /nl3/x
!ERROR: 'nl3' is already declared in this scoping unit
integer :: nl3
nl2 = 1
end
subroutine s12(x)
real, intent(in) :: x
namelist /nl/x
!ERROR: NAMELIST input group must not contain undefinable item 'x'
!BECAUSE: 'x' is an INTENT(IN) dummy argument
read(*,nml=nl)
end