aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanne Blomqvist <jb@gcc.gnu.org>2011-07-13 21:46:44 +0300
committerJanne Blomqvist <jb@gcc.gnu.org>2011-07-13 21:46:44 +0300
commit5f54710465b16155cffaa7934e29533cd2d21292 (patch)
treee79f00855ec05f85b621ccd763a2676cc70806e1
parent9e34e53f8e2c0379411d643790e0587038d922cf (diff)
downloadgcc-5f54710465b16155cffaa7934e29533cd2d21292.zip
gcc-5f54710465b16155cffaa7934e29533cd2d21292.tar.gz
gcc-5f54710465b16155cffaa7934e29533cd2d21292.tar.bz2
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
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/read_list_eof_1.f9038
-rw-r--r--libgfortran/ChangeLog7
-rw-r--r--libgfortran/io/list_read.c12
4 files changed, 54 insertions, 9 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d4743a6..f6fd7f0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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*,
diff --git a/gcc/testsuite/gfortran.dg/read_list_eof_1.f90 b/gcc/testsuite/gfortran.dg/read_list_eof_1.f90
index 775346e..c33bc2e 100644
--- a/gcc/testsuite/gfortran.dg/read_list_eof_1.f90
+++ b/gcc/testsuite/gfortran.dg/read_list_eof_1.f90
@@ -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
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 0bf20db..b66f300 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -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
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index baf2f54..c88f232 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -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: