------- 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

Reply via email to