re PR libfortran/16436 (gfortran TL edit descriptor failure - test f77-edit-t-in.f)

PR libfortran/16436
	* io/transfer.c (read_sf): Correct updating of bytes_left field.
	(formatted_transfer): Correct updating of bytes_left field and
	reformatting code (comments and whitespace).
	* io/unix.c (move_pos_offset): "active" field should not be
	changed here. Whitespace corrections.
	* gfortran.dg/g77/f77-edit-t-in.f: Not XFAIL-ed any more.

From-SVN: r101100
This commit is contained in:
Francois-Xavier Coudert 2005-06-17 00:13:26 +02:00 committed by François-Xavier Coudert
parent 0518582d92
commit 2f06ccc69e
5 changed files with 33 additions and 25 deletions

View file

@ -1,3 +1,8 @@
2005-06-17 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR libfortran/16436
* gfortran.dg/g77/f77-edit-t-in.f: Not XFAIL-ed any more.
2005-06-16 Richard Guenther <rguenth@gcc.gnu.org>
* gcc.target/i386/attributes-error.c: New testcase.

View file

@ -3,7 +3,7 @@ C (ANSI X3.9-1978 Section 13.5.3.2)
C
C Origin: David Billinghurst <David.Billinghurst@riotinto.com>
C
C { dg-do run {xfail *-*-*} } gfortran PR 16436
C { dg-do run }
integer i,j
real a,b,c,d,e
character*32 in

View file

@ -1,3 +1,12 @@
2005-06-17 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR libfortran/16436
* io/transfer.c (read_sf): Correct updating of bytes_left field.
(formatted_transfer): Correct updating of bytes_left field and
reformatting code (comments and whitespace).
* io/unix.c (move_pos_offset): "active" field should not be
changed here. Whitespace corrections.
2005-06-15 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR libfortran/21950

View file

@ -160,7 +160,6 @@ read_sf (int *length)
return base;
}
current_unit->bytes_left = options.default_recl;
readlen = 1;
n = 0;
@ -214,6 +213,7 @@ read_sf (int *length)
sf_seen_eor = 0;
}
while (n < *length);
current_unit->bytes_left -= *length;
if (ioparm.size != NULL)
*ioparm.size += *length;
@ -675,22 +675,19 @@ formatted_transfer (bt type, void *p, int len)
case FMT_TL:
case FMT_T:
if (f->format==FMT_TL)
if (f->format == FMT_TL)
pos = current_unit->recl - current_unit->bytes_left - f->u.n;
else /* FMT_T */
{
pos = f->u.n ;
pos= current_unit->recl - current_unit->bytes_left - pos;
}
else // FMT==T
{
consume_data_flag = 0 ;
pos = f->u.n - 1;
consume_data_flag = 0;
pos = f->u.n - 1;
}
if (pos < 0 || pos >= current_unit->recl )
{
generate_error (ERROR_EOR, "T Or TL edit position error");
break ;
}
{
generate_error (ERROR_EOR, "T Or TL edit position error");
break ;
}
m = pos - (current_unit->recl - current_unit->bytes_left);
if (m == 0)
@ -707,6 +704,7 @@ formatted_transfer (bt type, void *p, int len)
if (m < 0)
{
move_pos_offset (current_unit->s,m);
current_unit->bytes_left -= m;
}
break;

View file

@ -154,26 +154,22 @@ move_pos_offset (stream* st, int pos_off)
unix_stream * str = (unix_stream*)st;
if (pos_off < 0)
{
str->active += pos_off;
if (str->active < 0)
str->active = 0;
str->logical_offset += pos_off;
str->logical_offset += pos_off;
if (str->dirty_offset+str->ndirty > str->logical_offset)
if (str->dirty_offset + str->ndirty > str->logical_offset)
{
if (str->ndirty + pos_off > 0)
str->ndirty += pos_off ;
if (str->ndirty + pos_off > 0)
str->ndirty += pos_off;
else
{
str->dirty_offset += pos_off + pos_off;
str->ndirty = 0 ;
str->ndirty = 0;
}
}
return pos_off ;
return pos_off;
}
return 0 ;
return 0;
}