Commit ae01ced5 by Jakub Jelinek Committed by Jakub Jelinek

re PR fortran/47878 (187.facerec miscompares)

	PR fortran/47878
	* io/transfer.c (read_sf): Call fbuf_getptr only at the end,
	and subtract n, dtp->u.p.sf_seen_eor and seen_comma from it.

	* gfortran.dg/pr47878.f90: New test.

From-SVN: r170476
parent 01bd5703
2011-02-24 Jakub Jelinek <jakub@redhat.com>
PR fortran/47878
* gfortran.dg/pr47878.f90: New test.
2011-02-24 Richard Guenther <rguenther@suse.de>
PR testsuite/47801
......
! PR fortran/47878
! { dg-do run }
integer :: a(5)
open (99, recl = 40)
write (99, '(5i3)') 1, 2, 3
rewind (99)
read (99, '(5i3)') a
if (any (a.ne.(/1, 2, 3, 0, 0/))) call abort
close (99, status = 'delete')
end
2011-02-24 Jakub Jelinek <jakub@redhat.com>
PR fortran/47878
* io/transfer.c (read_sf): Call fbuf_getptr only at the end,
and subtract n, dtp->u.p.sf_seen_eor and seen_comma from it.
2011-02-24 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/47802
......
/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
Contributed by Andy Vaught
Namelist transfer functions contributed by Paul Thomas
......@@ -284,7 +284,6 @@ static char *
read_sf (st_parameter_dt *dtp, int * length)
{
static char *empty_string[0];
char *base;
int q, q2;
int n, lorig, seen_comma;
......@@ -302,9 +301,6 @@ read_sf (st_parameter_dt *dtp, int * length)
/* Read data into format buffer and scan through it. */
lorig = *length;
base = fbuf_getptr (dtp->u.p.current_unit);
if (base == NULL)
return NULL;
while (n < *length)
{
......@@ -396,7 +392,12 @@ read_sf (st_parameter_dt *dtp, int * length)
if ((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0)
dtp->u.p.size_used += (GFC_IO_INT) n;
return base;
/* We can't call fbuf_getptr before the loop doing fbuf_getc, because
fbuf_getc might reallocate the buffer. So return current pointer
minus all the advances, which is n plus up to two characters
of newline or comma. */
return fbuf_getptr (dtp->u.p.current_unit)
- n - dtp->u.p.sf_seen_eor - seen_comma;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment