OSDN Git Service

2008-12-13 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 14 Dec 2008 06:50:53 +0000 (06:50 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 14 Dec 2008 06:50:53 +0000 (06:50 +0000)
PR libfortran/38504
io/write.c (write_decimal): Skip extra sign '-' at beginning of string
returned by gfc_itoa.

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

libgfortran/ChangeLog
libgfortran/io/write.c

index dcc4867..3be2b22 100644 (file)
@@ -1,3 +1,9 @@
+2008-12-13  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/38504
+       io/write.c (write_decimal): Skip extra sign '-' at beginning of string
+       returned by gfc_itoa.
+
 2008-12-08  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libfortran/38430
index 32c5847..3cd67b3 100644 (file)
@@ -600,9 +600,16 @@ write_decimal (st_parameter_dt *dtp, const fnode *f, const char *source,
   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);