]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR libfortran/70684 (incorrect reading of values from file on Windows)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Fri, 6 May 2016 01:18:59 +0000 (01:18 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Fri, 6 May 2016 01:18:59 +0000 (01:18 +0000)
2016-05-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

        Backport from trunk.
        PR libgfortran/70684
        * io/list_read (next_char): Add '\r' to check for end of line.
        factor. (two places)

        PR libgfortran/70684
        * gfortran.dg/list_read_14.f90: New test.

From-SVN: r235941

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

index ad59aa11ed380c9f68d18dfa854a16b9b6e835bf..19b066b214da1de723e1426b3bf8096bdc34014c 100644 (file)
@@ -1,3 +1,9 @@
+2016-05-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from trunk.
+       PR libgfortran/70684
+       * gfortran.dg/list_read_14.f90: New test.
+
 2016-04-28  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/70858
diff --git a/gcc/testsuite/gfortran.dg/list_read_14.f90 b/gcc/testsuite/gfortran.dg/list_read_14.f90
new file mode 100644 (file)
index 0000000..15bcfad
--- /dev/null
@@ -0,0 +1,25 @@
+! { dg-do run }
+! PR70684 incorrect reading of values from file on Windows
+program test
+implicit none
+integer,parameter :: isize=12
+integer,parameter :: funit=12
+integer :: i
+character(1), parameter :: cr=char(13)
+double precision, dimension(isize) :: a, res
+res= (/ 1.0000000000000000, 2.0000000000000000, 3.0000000000000000, &
+        4.0000000000000000, 5.0000000000000000, 6.0000000000000000, &
+        7.0000000000000000, 8.0000000000000000, 9.0000000000000000, &
+        10.000000000000000, 11.000000000000000, 12.000000000000000 /)
+do i=1,isize
+ a(i)=dble(i)
+enddo
+open(funit,status="scratch")
+write(funit,'(1x,6(f25.20,'',''),a)') (a(i),i=1,6), cr
+write(funit,'(1x,6(f25.20,'',''),a)') (a(i),i=7,12), cr
+rewind(funit)
+a=0d0
+read(funit,*) (a(i),i=1,isize)
+close(funit)
+if (any(a /= res)) call abort
+end
index dba6ffbb5028319a887e5b4bb7e78bf249782ab2..5f767c9b61495645fc9590335ca0c638cfe51743 100644 (file)
@@ -1,3 +1,10 @@
+2016-05-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from trunk.
+       PR libgfortran/70684
+       * io/list_read (next_char): Add '\r' to check for end of line.
+       factor. (two places)
+
 2016-04-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
            Dominique d'Humieres  <dominiq@lps.ens.fr>
 
index d3fac4c52a5ca917bd1e26850400c27d56583237..9e6dd3153714e201d33980ac97f772d9416a0a22 100644 (file)
@@ -141,7 +141,8 @@ next_char (st_parameter_dt *dtp)
       dtp->u.p.at_eol = 0;
       c = dtp->u.p.last_char;
       dtp->u.p.last_char = EOF - 1;
-      goto done;
+      dtp->u.p.at_eol = (c == '\n' || c == '\r' || c == EOF);
+      return c;
     }
 
   /* Read from line_buffer if enabled.  */
@@ -155,7 +156,8 @@ next_char (st_parameter_dt *dtp)
        {
          dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos] = '\0';
          dtp->u.p.line_buffer_pos++;
-         goto done;
+         dtp->u.p.at_eol = (c == '\n' || c == '\r' || c == EOF);
+         return c;
        }
 
       dtp->u.p.line_buffer_pos = 0;