[Bug fortran/69456] New: Namelist value with trailing sign is ignored without error
jschwab at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Jan 24 15:07:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69456
Bug ID: 69456
Summary: Namelist value with trailing sign is ignored without
error
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: jschwab at gmail dot com
Target Milestone: ---
I recently encountered the following unexpected behavior in 4.9.4. I built
trunk on 20160123 (r232765) and confirmed this behavior still exists.
If a real value in a namelist has a trailing sign, its value is ignored and the
value remains unmodified. I expected this to lead to a runtime error when
reading the namelist.
I read the code for the function parse_real in libgfortran/io/list_read.c and
this behavior appears to exist because the value '1+1' is permitted as a
shorthand for '1e+1'. This was also surprising to me.
I read the Fortran 2008 specification. I had difficulty fully understanding
it, but I failed to find a place where it said that exponent-letter can be
legally omitted. A look at the list of gfortran vendor extensions as well as a
web search also failed to provide additional information.
A sample program (adapted from pr56743) demonstrating this behavior is below:
implicit none
real :: r1 = -1
real :: r2 = -1
real :: r3 = -1
real :: r4 = -1
namelist /nml/ r1, r2, r3, r4
write (*, nml=nml)
open (99, file='nml.dat', status="replace")
write(99,*) "&nml"
write(99,*) " r1=1+" ! BUG: wrong result: Unmodified, no error
write(99,*) " r2=1-" ! BUG: wrong result: Unmodified, no error
write(99,*) " r3=1+1" ! Treated as 1e+1?!
write(99,*) " r4=1-1" ! Treated as 1e-1?!
write(99,*) "/"
rewind(99)
read (99, nml=nml)
write (*, nml=nml)
close (99, status="delete")
end
The output of this program is
&NML
R1= -1.00000000 ,
R2= -1.00000000 ,
R3= -1.00000000 ,
R4= -1.00000000 ,
/
&NML
R1= -1.00000000 ,
R2= -1.00000000 ,
R3= 10.0000000 ,
R4= 0.100000001 ,
/
More information about the Gcc-bugs
mailing list