[Patch, libfortran] PR 52608 F formatting with scale factor
Janne Blomqvist
blomqvist.janne@gmail.com
Sat Mar 17 17:23:00 GMT 2012
Hi,
a recent patch by yours truly caused incorrect output for the
combination of scale factor, the value containing initial zeroes, and
F editing. Fixed by moving the removal of the initial zeros until
after the scale factor has been applied to the value. Committed the
patch below as obvious after regtesting and running the NIST
testsuite.
Index: ChangeLog
===================================================================
--- ChangeLog (revision 185485)
+++ ChangeLog (working copy)
@@ -1,3 +1,9 @@
+2012-03-17 Janne Blomqvist <jb@gcc.gnu.org>
+
+ PR libfortran/52608
+ * io/write_float.def (output_float): Move removal of initial zeros
+ until after the scale factor has been applied.
+
2012-03-16 Janne Blomqvist <jb@gcc.gnu.org>
* io/unix.h (struct stream): Rename to stream_vtable.
Index: io/write_float.def
===================================================================
--- io/write_float.def (revision 185485)
+++ io/write_float.def (working copy)
@@ -180,12 +180,6 @@ output_float (st_parameter_dt *dtp, cons
/* Make sure the decimal point is a '.'; depending on the
locale, this might not be the case otherwise. */
digits[nbefore] = '.';
- if (digits[0] == '0' && nbefore == 1)
- {
- digits++;
- nbefore--;
- ndigits--;
- }
if (p != 0)
{
if (p > 0)
@@ -229,6 +223,13 @@ output_float (st_parameter_dt *dtp, cons
nafter = d;
}
+ while (digits[0] == '0' && nbefore > 0)
+ {
+ digits++;
+ nbefore--;
+ ndigits--;
+ }
+
expchar = 0;
/* If we need to do rounding ourselves, get rid of the dot by
moving the fractional part. */
--
Janne Blomqvist
More information about the Fortran
mailing list