This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[gfortran] patch for pr 17286
- From: Bud Davis <bdavis9659 at comcast dot net>
- To: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, gfortran <fortran at gcc dot gnu dot org>
- Date: Mon, 20 Sep 2004 21:53:40 -0500
- Subject: [gfortran] patch for pr 17286
namelist read was not working when there are spaces between the
equal and the data.
the below patch fixes this.
tested i686/gnu/linux with no additional failures.
2004-09-20 Bud Davis <bdavis9659@comcast.net>
PR fortran/17286
* io/list_read.c (namelist_read): ignore spaces after
the '=' for namelist reads.
--bud
! pr17286
! namelist read fails when spaces exist between the '=' and the numbers
! this is a libgfortran bug
! derived from testcase provided by Paul Thomas <paulthomas2@wanadoo.fr
program bug3
integer num1 , num2 , num3 , num4
data num3 / 42 /
data num4 / 56 /
namelist /mynml1/ num1,num2
namelist /mynml2/ num3,num4
logical dbg
data dbg / .TRUE. /
open(unit=10,status='SCRATCH')
write(10,'(A)') "&mynml1,num1=16,num2=32,&end"
!
! write mynml2
!
write(10,mynml2)
rewind(10)
!
! now read back
!
num1 = -1
num2 = -1
read(10,mynml1)
if (num1.eq.16.and.num2.eq.32) then
if (dbg) write(*,mynml1)
else
if (dbg) print *, 'expected 16 32 got ',num1,num2
call abort
endif
num3 = -1
num4 = -1
read(10,mynml2)
if (num3.eq.42.and.num4.eq.56) then
if (dbg) write(*,mynml2)
else
if (dbg) print *, 'expected 42 56 got ',num3,num4
call abort
endif
close(10)
end
Index: gcc/libgfortran/io/list_read.c
===================================================================
RCS file: /cvs/gcc/gcc/libgfortran/io/list_read.c,v
retrieving revision 1.9
diff -c -3 -p -r1.9 list_read.c
*** gcc/libgfortran/io/list_read.c 14 Sep 2004 00:56:44 -0000 1.9
--- gcc/libgfortran/io/list_read.c 21 Sep 2004 02:46:20 -0000
*************** restart:
*** 1496,1501 ****
--- 1496,1505 ----
len = nl->len;
p = nl->mem_pos;
+
+ /* skip any blanks or tabs after the = */
+ eat_spaces ();
+
switch (nl->type)
{
case BT_INTEGER: