Items in NAMELIST groups might be host-associated implicitly-typed variables, but name resolution can't know that when the NAMELIST appears in a specification part and the host's execution part has not yet been analyzed. So defer NAMELIST group item name resolution to the end of the execution part. This is safe because nothing else in name resolution depends on whether a variable is in a NAMELIST group or not. Differential Revision: https://reviews.llvm.org/D123723
91 lines
1.5 KiB
Fortran
91 lines
1.5 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)
|
|
!ERROR: 'i' is already declared in this scoping unit
|
|
data ((x(i,i),i=1,2),i=1,2)/4*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
|