--- /dev/null
+! { dg-do run }
+! { dg-options "-fno-sign-zero" }
+!
+! PR fortran/55539
+!
+program nosigned_zero_3
+ implicit none
+ character(len=20) :: s
+ real(4) :: x = -1.2e-3
+ real(8) :: y = -1.2e-3
+ write(s,'(7f10.3)') x
+ if (trim(adjustl(s)) /= "-0.001") call abort
+ write(s, '(7f10.3)') y
+ if (trim(adjustl(s)) /= "-0.001") call abort
+end program nosigned_zero_3
+2012-12-26 Janne Blomqvist <jb@gcc.gnu.org>
+
+ PR fortran/55539
+ * io/write_float.def (output_float): Take into account decimal
+ dot.
+
2012-12-21 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/30162
/* Scan the digits string and count the number of zeros. If we make it
all the way through the loop, we know the value is zero after the
rounding completed above. */
- for (i = 0; i < ndigits; i++)
+ int hasdot = 0;
+ for (i = 0; i < ndigits + hasdot; i++)
{
- if (digits[i] != '0' && digits[i] != '.')
+ if (digits[i] == '.')
+ hasdot = 1;
+ else if (digits[i] != '0')
break;
}
/* To format properly, we need to know if the rounded result is zero and if
so, we set the zero_flag which may have been already set for
actual zero. */
- if (i == ndigits)
+ if (i == ndigits + hasdot)
{
zero_flag = true;
/* The output is zero, so set the sign according to the sign bit unless