This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [gfortran] patch for pr14942 -- list directed I/O
- From: Bud Davis <bdavis9659 at comcast dot net>
- To: gfortran <fortran at gcc dot gnu dot org>
- Cc: gcc-patches at gcc dot gnu dot org, Steve Kargl <sgk at troutmask dot apl dot washington dot edu>
- Date: Sat, 24 Apr 2004 21:09:42 -0500
- Subject: Re: [gfortran] patch for pr14942 -- list directed I/O
- References: <1082081238.9535.14.camel@localhost.localdomain>
Second try at fixing this problem.
thanks to steve kargl for coming up with additional test cases.
tested i686/gnu/linux FC1.
--bud
! pr 14942, list directed io
program d
implicit none
integer i, j, m, n, nin, k
real x(3,4)
data x / 1,1,1,2,2,2,3,3,3,4,4,4 /
real y(3,4)
data y / 1,1,1,2,2,2,3,3,3,4,4,4 /
logical debug ! set me true to see the output
debug = .FALSE.
nin = 1
n = 4
open(unit = nin)
write(nin,*) n
do I = 1,3
write(nin,*)(x(i,j), j=1, n)
end do
m = 3
n = 4
write(nin,*) m,n
do I = 1,3
write(nin,*)(x(i,j), j=1, n)
enddo
close(nin)
! ok, the data file is written
open(unit = nin)
read(nin, fmt = *) n
if (debug ) write(*,'(A,I2)') 'n = ', n
do i = 1, 3
do K = 1,n
x(i,k) = -1
enddo
read(nin, fmt = *) (x(i,j), j=1, n)
if (debug) write(*, *) (x(i,j), j=1, n)
do K = 1,n
if (x(i,k).ne.y(i,k)) call abort
end do
end do
m = 0
n = 0
read(nin, fmt = *) m, n
if (debug) write(*,'(A,I2,2X,A,I2)') 'm = ', m, 'n = ', n
do i = 1, m
do K = 1,n
x(i,k) = -1
enddo
read(nin, fmt = *) (x(i,j), j=1, n)
if (debug) write(*, *) (x(i,j), j=1, n)
do K = 1,n
if (x(i,k).ne.y(i,k)) call abort
end do
end do
end program d
2004-04-24 Bud Davis <bdavis9659@comcast.net>
PR fortran/14942
* list_read.c(list_formatted_read): finish consuming the
spaces and seperators at eoln to get ready for next item.
Index: gcc/libgfortran/io/list_read.c
===================================================================
RCS file: /cvs/gcc/gcc/libgfortran/io/Attic/list_read.c,v
retrieving revision 1.1.2.7
diff -c -3 -p -r1.1.2.7 list_read.c
*** gcc/libgfortran/io/list_read.c 24 Mar 2004 12:14:03 -0000
1.1.2.7
--- gcc/libgfortran/io/list_read.c 25 Apr 2004 02:02:20 -0000
*************** list_formatted_read (bt type, void *p, i
*** 1243,1249 ****
{ /* Found a null value */
eat_separator ();
repeat_count = 0;
! return;
}
}
--- 1243,1252 ----
{ /* Found a null value */
eat_separator ();
repeat_count = 0;
! if (at_eol)
! finish_separator ();
! else
! return;
}
}
*************** list_formatted_read (bt type, void *p, i
*** 1260,1270 ****
}
if (at_eol)
! finish_separator ();
saved_type = BT_NULL;
repeat_count = 1;
}
switch (type)
{
--- 1263,1276 ----
}
if (at_eol)
! finish_separator ();
! else
! eat_spaces ();
saved_type = BT_NULL;
repeat_count = 1;
}
+
switch (type)
{