regression in list directed write

THOMAS Paul Richard prthomas@drfccad.cea.fr
Tue Jan 11 11:14:00 GMT 2005


Andrew,

isfinite (real) is broken in all the Cygwin implementations of gcc but
isnan(real)works correctly.

Happily, finite( float or double ) works perfectly.  I have tested it in
~/libgfortran/io/write.c and it corrects the problem with gfortran on both
i686 and Athlon.  On Tru64, I do not seem able to stop the floating
exceptions that produce the output in question!  Equally, I have been unable
to link C programmes to finite or infinite, so I do not know what the gcc
build is doing.

Perhaps a conditional modification is in order?

Could you please do the necessary incantations with your system?

The requisite patch is:

*** write.old	Tue Jan 11 11:03:30 2005
--- ./gcc-4.0-20041205/libgfortran/io/write.c	Tue Jan 11 11:00:38 2005
***************
*** 665,671 ****
  
    if (f->format != FMT_B && f->format != FMT_O && f->format != FMT_Z)
      {
!       res = isfinite (n);
        if (res == 0)
  	{
  	  nb =  f->u.real.w;
--- 665,671 ----
  
    if (f->format != FMT_B && f->format != FMT_O && f->format != FMT_Z)
      {
!       res = finite (n);
        if (res == 0)
  	{
  	  nb =  f->u.real.w;



More information about the Fortran mailing list