[patch,libgfortran] Fix NIST fm906.for - redux

Paul Thomas paulthomas2@wanadoo.fr
Mon Jul 11 20:13:00 GMT 2005


Apologies, I sent an intermediate version of the patch, which was out of 
kilter with the remarks; this is what I am proposing to commit.

Paul T

> 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.
>  
>
Correct version that I propose to commit.

>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 20:00:15 -0000
>*************** read_complex (int length)
>*** 984,994 ****
>--- 984,1008 ----
>    if (parse_real (value, length))
>      return;
>  
>+ eol_1:
>    eat_spaces ();
>+   c = next_char ();
>+   if (c == '\n' || c== '\r')
>+     goto eol_1;
>+   else
>+     unget_char (c);
>+ 
>    if (next_char () != ',')
>      goto bad_complex;
>  
>+ eol_2:
>    eat_spaces ();
>+   c = next_char ();
>+   if (c == '\n' || c== '\r')
>+     goto eol_2;
>+   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
>
>  
>





More information about the Fortran mailing list