From 397763d2af80316f05484a8668c3d0dddf2c9811 Mon Sep 17 00:00:00 2001 From: Bud Davis Date: Wed, 23 Feb 2005 04:09:17 +0000 Subject: [PATCH] [multiple changes] 2004-02-22 Paul Thomas Bud Davis * io/list_read.c (read_real): Handle separators properly in list directed read. 2005-02-22 Bud Davis * gfortran.dg/list_read_4.f90: new test. From-SVN: r95436 --- gcc/testsuite/ChangeLog | 4 ++ gcc/testsuite/gfortran.dg/list_read_4.f90 | 54 +++++++++++++++++++++++ libgfortran/ChangeLog | 6 +++ libgfortran/io/list_read.c | 6 +-- 4 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/list_read_4.f90 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 91b54b0bcba..ddaa9ccad8c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-02-22 Bud Davis + + * gfortran.dg/list_read_4.f90: new test. + 2005-02-22 Kazu Hirata PR rtl-optimization/20017. diff --git a/gcc/testsuite/gfortran.dg/list_read_4.f90 b/gcc/testsuite/gfortran.dg/list_read_4.f90 new file mode 100644 index 00000000000..8260ca2d934 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/list_read_4.f90 @@ -0,0 +1,54 @@ +C { dg-do run } +C Test of gfortran list directed read> check delimiters are correctly +C treated. Written in f77 so that g77 will run for comparison. +C +C f , e and i edit reads are terminated separately by read_real.c +C +C PThomas Jan 2005 +C BDavis + program list_read_4 + integer i(10),l(10),k,j + real x(10),y(10) +C expected results + data y / 1.0,2.0,3.0,-1.0,-1.0,-1.0,4.0,4.0,99.0,99.0 / + data l /1,2,3,-1,-1,-1,4,4,99,99/ +C put them in a file + open (10,status="scratch") + write (10,*) " 1.0, 2.0 , 3.0,, 2* , 2*4.0 , 5*99.0" + write (10,*) " 1.0e0, 2.0e0 , 3.0e0,, 2* , 2*4.0e0 , 5*99.0e0" + write (10,*) " 1, 2 , 3,, 2* , 2*4 , 5*99" + write (10,*) " 1, 2 , 3,, 2* , 2*4 , 5*99" + rewind (10) +C + do k = 1,10 + x(k) = -1.0 + enddo + read (10,*,iostat=ier) x + if (ier.ne.0) call abort + do k = 1,10 + if (x(k).ne.y(k)) call abort + x(k) = -1 + end do + READ(10,*,iostat=ier) x + if (ier.ne.0) call abort + do k = 1,10 + if (x(k).ne.y(k)) call abort + x(k) = -1 + end do + READ(10,*,iostat=ier) x + if (ier.ne.0) call abort + do k = 1,10 + if (x(k).ne.y(k)) call abort + x(k) = -1 + end do +C integer + do k = 1,10 + i(k) = -1 + end do + READ(10,*,iostat=ier) (i(j),j=1,10) + if (ier.ne.0) call abort + do k = 1,10 + if (i(k).ne.y(k)) call abort + i(k) = -1 + end do + end diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 39b835d5bc9..cdb0868cdb6 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2004-02-22 Paul Thomas + Bud Davis + + * io/list_read.c (read_real): Handle separators properly + in list directed read. + 2004-02-21 Bud Davis PR fortran/20086 diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index eecc11491e3..74a6688b014 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -1052,8 +1052,6 @@ read_real (int length) goto got_repeat; CASE_SEPARATORS: - if (c != '\n' && c != ',') - unget_char (c); /* Real number that is just a digit-string. */ goto done; default: @@ -1164,8 +1162,6 @@ read_real (int length) break; CASE_SEPARATORS: - unget_char (c); - eat_separator (); goto done; default: @@ -1174,6 +1170,8 @@ read_real (int length) } done: + unget_char (c); + eat_separator (); push_char ('\0'); if (convert_real (value, saved_string, length)) return;