]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libfortran/31880 ([4.2 only] silent data corruption in gfortran read statement)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Fri, 11 May 2007 00:34:41 +0000 (00:34 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Fri, 11 May 2007 00:34:41 +0000 (00:34 +0000)
2007-05-10  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libfortran/31880
* io/unix.c (fd_alloc_r_at): Fix calculation of physical offset.

2007-05-10  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libfortran/31880
* gfortran.dg/unf_read_corrupted_2.f90: New test.

From-SVN: r124609

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

index cc610afc96ac66479706cb735b2d8e62a8187a96..29abbd142bd4a35eb1693a746fa60b2531372c83 100644 (file)
@@ -1,3 +1,8 @@
+2007-05-10  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/31880
+       * gfortran.dg/unf_read_corrupted_2.f90: New test.
+
 2007-05-10  Andreas Krebbel  <krebbel1@de.ibm.com>
 
        * gcc.dg/20070507-1.c: Disable for non-pic targets.
diff --git a/gcc/testsuite/gfortran.dg/unf_read_corrupted_2.f90 b/gcc/testsuite/gfortran.dg/unf_read_corrupted_2.f90
new file mode 100644 (file)
index 0000000..1788b45
--- /dev/null
@@ -0,0 +1,27 @@
+! { dg-do run }
+! PR31880 silent data corruption in gfortran read statement
+! Test from PR.
+      program r3
+
+      integer(kind=4) :: a(1025),b(1025),c(1025),d(2048),e(1022)
+      
+      a = 5
+      b = 6
+      c = 7
+      e = 8
+
+      do i=1,2048
+         d(i)=i
+      end do
+
+      open  (3,form='unformatted', status="scratch")
+      write (3) a,b,c,d,e
+      rewind 3
+      d = 0
+      read  (3) a,b,c,d
+      close (3)
+
+      if (d(1).ne.1) call abort
+      if (d(2048).ne.2048) call abort
+
+      end
index 641e6e765a38c2d1f496ec61560dc8e193c86595..6174425d09b0ad03eff98a4b3b62eae637585f75 100644 (file)
@@ -1,3 +1,8 @@
+2007-05-10  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/31880
+       * io/unix.c (fd_alloc_r_at): Fix calculation of physical offset.
+
 2007-03-14  Jakub Jelinek  <jakub@redhat.com>
 
        * io/unix.c (regular_file): For ACTION_UNSPECIFIED retry with
index 4d67e07f8f5743ed2809193780eac4f3fe57368b..7c51caa2e8344b9ab6b88e7780541e715866537b 100644 (file)
@@ -465,7 +465,7 @@ fd_alloc_r_at (unix_stream * s, int *len, gfc_offset where)
       if (n < 0)
        return NULL;
 
-      s->physical_offset = where + n;
+      s->physical_offset = m + n;
       s->active += n;
     }
   else
@@ -476,7 +476,7 @@ fd_alloc_r_at (unix_stream * s, int *len, gfc_offset where)
       if (do_read (s, s->buffer + s->active, &n) != 0)
        return NULL;
 
-      s->physical_offset = where + n;
+      s->physical_offset = m + n;
       s->active += n;
     }