PR 49296 List read, EOF without preceding separator

2011-07-13  Janne Blomqvist  <jb@gcc.gnu.org>

	PR libfortran/49296
	* io/list_read.c (read_logical): Don't error out if a valid value
	is followed by EOF instead of a normal separator.
	(read_integer): Likewise.

testsuite:

2011-07-13  Janne Blomqvist  <jb@gcc.gnu.org>

	PR libfortran/49296
	* gfortran.dg/read_list_eof_1.f90: Add tests for integer, real,
	and logical reads.

From-SVN: r176245
This commit is contained in:
Janne Blomqvist 2011-07-13 21:46:44 +03:00
parent 9e34e53f8e
commit 5f54710465
4 changed files with 54 additions and 9 deletions

View File

@ -1,3 +1,9 @@
2011-07-13 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/49296
* gfortran.dg/read_list_eof_1.f90: Add tests for integer, real,
and logical reads.
2011-07-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* gcc.c-torture/execute/990127-2.x: Use -mpc64 on i?86-*-darwin*,

View File

@ -3,7 +3,11 @@
program read_list_eof_1
implicit none
character(len=100) :: s
call genfil ()
integer :: ii
real :: rr
logical :: ll
call genfil ('a')
open (unit=20, file='read.dat', form='FORMATTED', action='READ', &
status='OLD')
read (20, fmt=*) s
@ -12,11 +16,39 @@ program read_list_eof_1
call abort ()
end if
call genfil ('1')
open (unit=20, file='read.dat', form='FORMATTED', action='READ', &
status='OLD')
read (20, fmt=*) ii
close (20, status='delete')
if (ii /= 1) then
call abort ()
end if
call genfil ('1.5')
open (unit=20, file='read.dat', form='FORMATTED', action='READ', &
status='OLD')
read (20, fmt=*) rr
close (20, status='delete')
if (rr /= 1.5) then
call abort ()
end if
call genfil ('T')
open (unit=20, file='read.dat', form='FORMATTED', action='READ', &
status='OLD')
read (20, fmt=*) ll
close (20, status='delete')
if (.not. ll) then
call abort ()
end if
contains
subroutine genfil
subroutine genfil(str)
character(len=*), intent(in) :: str
open(10, file='read.dat', form='unformatted', action='write', &
status='replace', access='stream')
write(10) 'a'
write(10) str
close(10)
end subroutine genfil
end program read_list_eof_1

View File

@ -1,3 +1,10 @@
2011-07-13 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/49296
* io/list_read.c (read_logical): Don't error out if a valid value
is followed by EOF instead of a normal separator.
(read_integer): Likewise.
2011-07-09 Tobias Burnus <burnus@net-b.de>
* runtime/error.c (sys_abort): Change argument list

View File

@ -657,22 +657,20 @@ read_logical (st_parameter_dt *dtp, int length)
{
case 't':
v = 1;
if ((c = next_char (dtp)) == EOF)
goto bad_logical;
c = next_char (dtp);
l_push_char (dtp, c);
if (!is_separator(c))
if (!is_separator(c) && c != EOF)
goto possible_name;
unget_char (dtp, c);
break;
case 'f':
v = 0;
if ((c = next_char (dtp)) == EOF)
goto bad_logical;
c = next_char (dtp);
l_push_char (dtp, c);
if (!is_separator(c))
if (!is_separator(c) && c != EOF)
goto possible_name;
unget_char (dtp, c);
@ -837,6 +835,7 @@ read_integer (st_parameter_dt *dtp, int length)
goto repeat;
CASE_SEPARATORS: /* Not a repeat count. */
case EOF:
goto done;
default:
@ -886,6 +885,7 @@ read_integer (st_parameter_dt *dtp, int length)
break;
CASE_SEPARATORS:
case EOF:
goto done;
default: