mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:46:46 +00:00

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
99 lines
1.7 KiB
Fortran
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
|