This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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] Fix NIST fm906.for - redux


I have responded to the comment from Brooks Moses, for which I am grateful. In fact, I took the opportunity to change the treatment so that CR/LF is handled. This has been done so that any number of EORs can occur before the comma or the imaginary part. The testcase has been modified to include EOR before the comma and EORs either side of the comma.

You will find the proposed ChangeLog entries, the patch and the testcase attached.

Regtested on RH9/Athlon.

OK to commit to 4.1 and, sometime, to 4.0?

Paul T
2005-07-11 Paul Thomas  <pault@gcc.gnu.org>

	* list_read.c (read_complex): Allow complex data in list-
	directed reads to have eols either side of the comma to
	fix NIST FM906.FOR failure.

2005-07-11  Paul Thomas  <pault@gcc.gnu.org>

	* gfortran.dg/complex_read.f90: New.


Index: gcc/libgfortran/io/list_read.c
===================================================================
RCS file: /cvs/gcc/gcc/libgfortran/io/list_read.c,v
retrieving revision 1.24
diff -c -3 -p -r1.24 list_read.c
*** gcc/libgfortran/io/list_read.c	23 Jun 2005 18:50:24 -0000	1.24
--- gcc/libgfortran/io/list_read.c	11 Jul 2005 17:40:16 -0000
*************** read_complex (int length)
*** 985,994 ****
--- 985,1006 ----
      return;
  
    eat_spaces ();
+   c = next_char ();
+   if (c == '\n' || c== '\r')
+     eat_spaces ();
+   else
+     unget_char (c);
+ 
    if (next_char () != ',')
      goto bad_complex;
  
    eat_spaces ();
+   c = next_char ();
+   if (c == '\n' || c== '\r')
+     eat_spaces ();
+   else
+     unget_char (c);
+ 
    if (parse_real (value + length, length))
      return;
  

!===================================================================

! { dg-do run }
! Test of the fix to the bug in NIST fm906.for.
! Contributed by Paul Thomas  <pault@gcc.gnu.org>
!
program complex_read
  complex            ::  a
  open (10, status="scratch")

! Test that we have not broken the one line form.

  write (10, *) " ( 0.99  ,  9.9  )"
  rewind (10)
  read (10,*) a
  if (a.ne.(0.99,9.90)) call abort ()

! Test a new record after the.comma (the original bug).

  rewind (10)
  write (10, *) " ( 99.0   ,"
  write (10, *) "   999.0  )"
  rewind (10)
  read (10,*) a
  if (a.ne.(99.0,999.0)) call abort ()

! Test a new record before the.comma 

  rewind (10)
  write (10, *) " ( 0.99  "
  write (10, *) " , 9.9  )"
  rewind (10)
  read (10,*) a
  if (a.ne.(0.99,9.90)) call abort ()

! Test a new records before and after the.comma 

  rewind (10)
  write (10, *) " ( 99.0   "
  write (10, *) ",         "
  write (10, *) "  999.0  )"
  rewind (10)
  read (10,*) a
  if (a.ne.(99.0,999.0)) call abort ()

  close (10)
end program complex_read


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