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>
|
2011-02-24 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
PR testsuite/47801
|
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>
|
2011-02-24 Janne Blomqvist <jb@gcc.gnu.org>
|
||||||
|
|
||||||
PR libfortran/47802
|
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.
|
Free Software Foundation, Inc.
|
||||||
Contributed by Andy Vaught
|
Contributed by Andy Vaught
|
||||||
Namelist transfer functions contributed by Paul Thomas
|
Namelist transfer functions contributed by Paul Thomas
|
||||||
@ -284,7 +284,6 @@ static char *
|
|||||||
read_sf (st_parameter_dt *dtp, int * length)
|
read_sf (st_parameter_dt *dtp, int * length)
|
||||||
{
|
{
|
||||||
static char *empty_string[0];
|
static char *empty_string[0];
|
||||||
char *base;
|
|
||||||
int q, q2;
|
int q, q2;
|
||||||
int n, lorig, seen_comma;
|
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. */
|
/* Read data into format buffer and scan through it. */
|
||||||
lorig = *length;
|
lorig = *length;
|
||||||
base = fbuf_getptr (dtp->u.p.current_unit);
|
|
||||||
if (base == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
while (n < *length)
|
while (n < *length)
|
||||||
{
|
{
|
||||||
@ -396,7 +392,12 @@ read_sf (st_parameter_dt *dtp, int * length)
|
|||||||
if ((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0)
|
if ((dtp->common.flags & IOPARM_DT_HAS_SIZE) != 0)
|
||||||
dtp->u.p.size_used += (GFC_IO_INT) n;
|
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