OSDN Git Service

2004-12-15 Bud Davis <bdavis9659@comcast.net>
authorbdavis <bdavis@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Dec 2004 12:42:39 +0000 (12:42 +0000)
committerbdavis <bdavis@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Dec 2004 12:42:39 +0000 (12:42 +0000)
            Steven G. Kargl  <kargls@comcast.net>

        PR fortran/17597
        * io/list_read.c (read_real): do not push back a comma when
        it delimits a real value without a decimal point

2004-12-15  Bud Davis  <bdavis9659@comcast.net>
            Steven G. Kargle  <kargls@comcast.net>

        PR fortran/17597
        * gfortran.dg/list_read_3.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@92190 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/list_read_3.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/io/list_read.c

index 37a59e2..c5ba7ed 100644 (file)
@@ -1,3 +1,9 @@
+2004-12-15  Bud Davis  <bdavis9659@comcast.net>
+            Steven G. Kargle  <kargls@comcast.net>
+
+       PR fortran/17597
+       * gfortran.dg/list_read_3.f90: New test.
+
 2004-12-15  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * gcc.dg/ftrapv-2.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/list_read_3.f90 b/gcc/testsuite/gfortran.dg/list_read_3.f90
new file mode 100644 (file)
index 0000000..908139a
--- /dev/null
@@ -0,0 +1,101 @@
+! { dg-do run }
+! Program to test reading in a list of integer values into REAL variables.
+! The comma separator was not handled correctly.
+!
+program fg
+
+  character(len=80) buff
+  logical debug
+
+  debug = .FALSE.
+  a = 0
+  b = 0
+  c = 0
+  d = 0
+  write (buff,'(a)') '10,20,30,40'
+  read(buff,*) a, b, c, d
+
+  if (debug) then
+    print*,buff
+    print*,a, b, c, d
+  end if
+
+  if (abs(10. - a) > 1e-5) call abort
+  if (abs(20. - b) > 1e-5) call abort
+  if (abs(30. - c) > 1e-5) call abort
+  if (abs(40. - d) > 1e-5) call abort
+
+  a = 0
+  b = 0
+  c = 0
+  d = 0
+  write (buff,'(a)') '10.,20.,30.,40.'
+  read(buff,*) a, b, c, d
+
+  if (abs(10. - a) > 1e-5) call abort
+  if (abs(20. - b) > 1e-5) call abort
+  if (abs(30. - c) > 1e-5) call abort
+  if (abs(40. - d) > 1e-5) call abort
+
+  if (debug) then
+    print*,buff
+    print*,a, b, c, d
+  end if 
+
+  a = 0
+  b = 0
+  c = 0
+  d = 0
+  write (buff,'(a)') '10.0,20.0,30.0,40.0'
+  read(buff,*) a, b, c, d
+                                                                                
+  if (abs(10. - a) > 1e-5) call abort
+  if (abs(20. - b) > 1e-5) call abort
+  if (abs(30. - c) > 1e-5) call abort
+  if (abs(40. - d) > 1e-5) call abort
+
+  if (debug) then 
+    print*,buff
+    print*,a, b, c, d
+  end if
+                                                                              
+
+  a = 0
+  b = -99 
+  c = 0
+  d = 0
+  write (buff,'(a)') '10.0,,30.0,40.0'
+  read(buff,*) a, b, c, d
+                                                                                
+  if (abs(10. - a) > 1e-5) call abort
+  if (abs(-99. - b) > 1e-5) call abort
+  if (abs(30. - c) > 1e-5) call abort
+  if (abs(40. - d) > 1e-5) call abort
+
+  if (debug) then
+    print*,buff
+    print*,a, b, c, d
+  end if
+                                                                                
+
+   call abc
+
+end program
+
+subroutine abc
+
+  character(len=80) buff
+
+  a = 0
+  b = 0
+  c = 0
+  d = 0
+  write (buff,'(a)') '10,-20,30,-40'
+  read(buff,*) a, b, c, d
+
+  if (abs(10. - a) > 1e-5) call abort
+  if (abs(-20. - b) > 1e-5) call abort
+  if (abs(30. - c) > 1e-5) call abort
+  if (abs(-40. - d) > 1e-5) call abort
+
+end subroutine abc
index 94fd030..6b331c6 100644 (file)
@@ -1,3 +1,10 @@
+2004-12-15  Bud Davis  <bdavis9659@comcast.net>
+            Steven G. Kargl  <kargls@comcast.net>
+
+       PR fortran/17597
+       * io/list_read.c (read_real): do not push back a comma when
+       it delimits a real value without a decimal point
+
 2004-12-14  Steve Ellcey  <sje@cup.hp.com>
 
        * libgfortran/io/transfer.c (us_read): Use memcpy/memset
index cee5c74..4445de4 100644 (file)
@@ -1043,7 +1043,7 @@ read_real (int length)
          goto got_repeat;
 
        CASE_SEPARATORS:
-          if (c != '\n')
+          if (c != '\n' &&  c != ',')
             unget_char (c);    /* Real number that is just a digit-string.  */
          goto done;