mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-25 11:54:01 +08:00
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
This commit is contained in:
parent
01bd5703f5
commit
ae01ced508
@ -1,3 +1,8 @@
|
||||
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
|
||||
|
10
gcc/testsuite/gfortran.dg/pr47878.f90
Normal file
10
gcc/testsuite/gfortran.dg/pr47878.f90
Normal file
@ -0,0 +1,10 @@
|
||||
! 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
|
@ -1,3 +1,9 @@
|
||||
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
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* 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;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user