This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch, libgfortran] [4.5 Regression] Spurious EOF condition when namelist read follows formatted read


Hi Folks,

This patch is simple and er um a obvious. :)

I was wondering what that line was for when I deleted it.

Regression tested on x86-64.

Will commit shortly and backport to 4.4 in a few days.

Jerry

2010-03-25 Jerry DeLisle <jvdelisle@gcc.gnu.org>

	PR libfortran/43517
	* io/read.c (read_x): Return if seen EOR condition.

Index: read.c
===================================================================
--- read.c	(revision 157735)
+++ read.c	(working copy)
@@ -1046,6 +1046,9 @@ read_x (st_parameter_dt *dtp, int n)
       goto done;
     }

+  if (dtp->u.p.sf_seen_eor)
+    return;
+
   p = fbuf_read (dtp->u.p.current_unit, &length);
   if (p == NULL)
     {


Test case read_eof_7.f90:


! { dg-do run }
! PR43517 Spurious EOF condition when namelist read follows formatted read
! Test case from the problem reporter - Michael Richmond
program main
  namelist /name/ j
  open (10,status='scratch',form='formatted')
  write(10,'(a)') "999999"
  write(10,'(a)') " $name"
  write(10,'(a)') "  j=73,"
  write(10,'(a)') " /"
  rewind(10)
  i = 54321
  idum = 6789
  read (10,'(2i5,4x)') i, idum ! Trailing 4x was setting EOF condition
  if (i /= 99999 .and. idum /= 9) call abort
  j = 12345
  read (10,name) ! EOF condition tripped here.
  if (j /= 73) call abort
end program main




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]