2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-04 20:21:36 +08:00

re PR libfortran/34887 (reverse tabbing before slash descriptor (regression vs. g77))

2008-01-26  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfofortran/34887
	* io/transfer.c (next_record_w): Always move to the farthest
	position when completing the record (also when we are
	processing a slash edit descriptor).

2008-01-26  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR libfofortran/34887
	* gfortran.dg/x_slash_2.f:  New test.

From-SVN: r131864
This commit is contained in:
Thomas Koenig 2008-01-26 15:22:59 +00:00
parent 1230d7f8de
commit 6cac36304e
4 changed files with 33 additions and 13 deletions
gcc/testsuite
libgfortran

@ -1,3 +1,8 @@
2008-01-26 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfofortran/34887
* gfortran.dg/x_slash_2.f: New test.
2008-01-26 Richard Guenther <rguenther@suse.de>
PR c++/34235

@ -0,0 +1,11 @@
! { dg-do run }
! PR 34887 - reverse tabs followed by a slash used to confuse I/O.
program main
character(len=2) :: b, a
open(10,form="formatted")
write (10,'(3X, A, T1, A,/)') 'aa', 'bb'
rewind(10)
read (10,'(A2,1X,A2)') b,a
if (a /= 'aa' .or. b /= 'bb') call abort
close(10,status="delete")
end

@ -1,3 +1,10 @@
2008-01-26 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfofortran/34887
* io/transfer.c (next_record_w): Always move to the farthest
position when completing the record (also when we are
processing a slash edit descriptor).
2008-01-25 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/34876

@ -2573,21 +2573,18 @@ next_record_w (st_parameter_dt *dtp, int done)
}
else
{
/* If this is the last call to next_record move to the farthest
position reached in preparation for completing the record.
(for file unit) */
if (done)
{
m = dtp->u.p.current_unit->recl -
dtp->u.p.current_unit->bytes_left;
if (max_pos > m)
{
length = (int) (max_pos - m);
p = salloc_w (dtp->u.p.current_unit->s, &length);
}
}
size_t len;
const char crlf[] = "\r\n";
/* Move to the farthest position reached in preparation for
completing the record. (for file unit) */
m = dtp->u.p.current_unit->recl -
dtp->u.p.current_unit->bytes_left;
if (max_pos > m)
{
length = (int) (max_pos - m);
p = salloc_w (dtp->u.p.current_unit->s, &length);
}
#ifdef HAVE_CRLF
len = 2;
#else