OSDN Git Service

2008-10-19 Jerry DeLisle <jvdelisle@gcc.gnu.org
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 19 Oct 2008 18:36:21 +0000 (18:36 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 19 Oct 2008 18:36:21 +0000 (18:36 +0000)
PR libfortran/37834
* io/write_float.def (output_float): Emit '0.' for special case of
format specifier 'f0.0' and value of zero. Likewise emit '0' for 'f1.0'.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141231 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/io/write_float.def

index cf3d930..9b2d18d 100644 (file)
@@ -1,3 +1,9 @@
+2008-10-19  Jerry DeLisle  <jvdelisle@gcc.gnu.org
+
+       PR libfortran/37834
+       * io/write_float.def (output_float): Emit '0.' for special case of
+       format specifier 'f0.0' and value of zero. Likewise emit '0' for 'f1.0'.
+
 2008-10-17  Jerry DeLisle  <jvdelisle@gcc.gnu.org
 
        PR libfortran/37863
index 73a6ed1..d55e379 100644 (file)
@@ -119,6 +119,22 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
        sign = calculate_sign (dtp, sign_bit);
       else
        sign = calculate_sign (dtp, 0);
+
+      /* Handle special cases.  */
+      if (w == 0)
+       w = 2;
+
+      /* For this one we choose to not output a decimal point.
+        F95 10.5.1.2.1  */
+      if (w == 1 && ft == FMT_F)
+       {
+         out = write_block (dtp, w);
+         if (out == NULL)
+           return;
+         *out = '0';
+         return;
+       }
+             
     }
 
   /* Normalize the fractional component.  */