re PR fortran/58324 (Bogus END-of-line error with list-directed I/O of file without trailing sequential record marker)

2014-03-15  Jerry DeLisle  <jvdelisle@gcc.gnu>

	PR libfortran/58324
	* io/list_read.c (finish_list_read): Read one character to check
	for the end of the file.  If it is the end, then issue the file
	end error message.  If not, use eat_line to reach the end
	without giving error.  The next attempt to read will then
	issue the error as described above.

From-SVN: r208591
This commit is contained in:
Jerry DeLisle 2014-03-15 15:12:01 +00:00
parent 68a2304438
commit e94710443a
2 changed files with 19 additions and 5 deletions

View File

@ -1,3 +1,12 @@
2014-03-15 Jerry DeLisle <jvdelisle@gcc.gnu>
PR libfortran/58324
* io/list_read.c (finish_list_read): Read one character to check
for the end of the file. If it is the end, then issue the file
end error message. If not, use eat_line to reach the end
without giving error. The next attempt to read will then
issue the error as described above.
2014-03-12 Jerry DeLisle <jvdelisle@gcc.gnu>
PR libfortran/38199
@ -10,7 +19,7 @@
formatted READ.
* io/list_read.c (finish_list_read): Don't call eat_line for
internal units.
2014-03-08 Jerry DeLisle <jvdelisle@gcc.gnu>
PR libfortran/38199

View File

@ -2092,8 +2092,6 @@ list_formatted_read (st_parameter_dt *dtp, bt type, void *p, int kind,
void
finish_list_read (st_parameter_dt *dtp)
{
int err;
free_saved (dtp);
fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode);
@ -2106,13 +2104,20 @@ finish_list_read (st_parameter_dt *dtp)
if (!is_internal_unit (dtp))
{
err = eat_line (dtp);
if (err == LIBERROR_END)
int c;
c = next_char (dtp);
if (c == EOF)
{
free_line (dtp);
hit_eof (dtp);
return;
}
if (c != '\n')
eat_line (dtp);
}
free_line (dtp);
}
/* NAMELIST INPUT