re PR libfortran/36857 (Non-English locale breaks gfortran float formatting ("printf...
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 21 Jul 2008 04:44:10 +0000 (04:44 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 21 Jul 2008 04:44:10 +0000 (04:44 +0000)
2008-07-20  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR fortran/36857
* io/write_float.def: Comment out locale dependent code and fix general
comments.

From-SVN: r138021

libgfortran/ChangeLog
libgfortran/io/write_float.def

index c845606c80311c8186bec235aa88730cf99b65ac..48a20e99d2187d8f0dd15203cdcf5f4025524dc3 100644 (file)
@@ -1,3 +1,9 @@
+2008-07-20  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/36857
+       * io/write_float.def: Comment out locale dependent code and fix general
+       comments.
+       
 2008-07-07  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/36341
index 090bd712eb411855d2e14732638d3742f06e32d3..ed4c45f6277ef2898beeb8acf934df58abf631ab 100644 (file)
@@ -99,32 +99,13 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size,
   if (d < 0)
     internal_error (&dtp->common, "Unspecified precision");
 
-  /* Use sprintf to print the number in the format +D.DDDDe+ddd
-     For an N digit exponent, this gives us (MIN_FIELD_WIDTH-5)-N digits
-     after the decimal point, plus another one before the decimal point.  */
-
   sign = calculate_sign (dtp, sign_bit);
-
-  /* #   The result will always contain a decimal point, even if no
-   *     digits follow it
-   *
-   * -   The converted value is to be left adjusted on the field boundary
-   *
-   * +   A sign (+ or -) always be placed before a number
-   *
-   * MIN_FIELD_WIDTH  minimum field width
-   *
-   * *   (ndigits-1) is used as the precision
-   *
-   *   e format: [-]d.ddde±dd where there is one digit before the
-   *   decimal-point character and the number of digits after it is
-   *   equal to the precision. The exponent always contains at least two
-   *   digits; if the value is zero, the exponent is 00.
-   */
-
-  /* Check the given string has punctuation in the correct places.  */
-  if (d != 0 && (buffer[2] != '.' || buffer[ndigits + 2] != 'e'))
-      internal_error (&dtp->common, "printf is broken");
+  
+  /* The following code checks the given string has punctuation in the correct
+     places.  Uncomment if needed for debugging.
+     if (d != 0 && ((buffer[2] != '.' && buffer[2] != ',')
+                   || buffer[ndigits + 2] != 'e'))
+       internal_error (&dtp->common, "printf is broken");  */
 
   /* Read the exponent back in.  */
   e = atoi (&buffer[ndigits + 3]) + 1;
@@ -702,8 +683,30 @@ OUTPUT_FLOAT_FMT_G(16)
 
 #undef OUTPUT_FLOAT_FMT_G
 
+
 /* Define a macro to build code for write_float.  */
 
+  /* Note: Before output_float is called, sprintf is used to print to buffer the
+     number in the format +D.DDDDe+ddd. For an N digit exponent, this gives us
+     (MIN_FIELD_WIDTH-5)-N digits after the decimal point, plus another one
+     before the decimal point.
+
+     #   The result will always contain a decimal point, even if no
+        digits follow it
+
+     -   The converted value is to be left adjusted on the field boundary
+
+     +   A sign (+ or -) always be placed before a number
+
+     MIN_FIELD_WIDTH  minimum field width
+
+     *   (ndigits-1) is used as the precision
+
+     e format: [-]d.ddde±dd where there is one digit before the
+       decimal-point character and the number of digits after it is
+       equal to the precision. The exponent always contains at least two
+       digits; if the value is zero, the exponent is 00.  */
+
 #ifdef HAVE_SNPRINTF
 
 #define DTOA \