https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109099
Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jvdelisle at gcc dot gnu.org
--- Comment #5 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Well I got curious here as I implemented many of the namelist features and have
not seen too many namelist related bugs. This is with the example in the
original post.
$ gfc -std=f2003 pr109099.f90
$ ./a.out
At line 9 of file pr109099.f90
Fortran runtime error: Cannot match namelist object name 234
My thinking is auto-filling anything is a legacy extension.
Now if one comments out the READ and sees how gfortran writes the namelist:
$ gfc -std=f2003 pr109099.f90
$ ./a.out
&GROUP
X= 12*999 ,
/
My own thought is that it is always good to check things this way to see if the
"form" of the namelist input is good. Modifying your program:
program testit
integer, allocatable :: x(:,:); namelist / group / x
character(len=80) :: input(3)
allocate( x(3,4),source=999)
x = reshape ([999, 999, 999, 999, 999, 999, 1, 2, 3, 4, 999, 999], [3, 4])
print *, shape(x), size(x)
input=[&
"&group ",&
" x(2,3)=1,2,3,4,",&
"/ "]
!read( input, nml=group)
write(*,group)
end program testit
Assuming I have your intent right in the reshape.
$ ./a.out
3 4 12
&GROUP
X= 6*999 ,1 ,2 ,3 ,4 ,
2*999 ,
/
and then doing the following shows a safer way to do these things:
program testit
integer, allocatable :: x(:,:); namelist / group / x
character(len=20) :: input(3)
allocate( x(3,4),source=999)
input=["&GROUP ",&
" X= 6*999,1,2,3,4,",&
" 2*999,/ "]
read( input, nml=group)
write(*,group)
end program testit
$ gfc -std=f2003 pr109099.f90
$ ./a.out
&GROUP
X= 6*999 ,1 ,2 ,3 ,4 ,
2*999 ,
/