------- Comment #10 from jvdelisle at gcc dot gnu dot org 2008-12-13 19:34 ------- Testing this.
Index: write.c =================================================================== --- write.c (revision 142574) +++ write.c (working copy) @@ -600,9 +600,16 @@ write_decimal (st_parameter_dt *dtp, con sign = calculate_sign (dtp, n < 0); if (n < 0) n = -n; - nsign = sign == S_NONE ? 0 : 1; + + /* conv calls gfc_itoa which sets the negative sign needed + by write_integer. The sign '+' or '-' is set below based on sign + calculated above, so we just point past the sign in the string + before proceeding to avoid double signs in corner cases. + (see PR38504) */ q = conv (n, itoa_buf, sizeof (itoa_buf)); + if (*q == '-') + q++; digits = strlen (q); -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38504