summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rwxr-xr-xgeneric/tclStrToD.c6
2 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 168dc0b..f1ab8a4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-04-02 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclStrToD.c (QuickConversion): Replaced another couple
+ of 'double' declarations with 'volatile double' to work around
+ misrounding issues in mingw-gcc 3.4.5.
+
2011-03-24 Donal K. Fellows <dkf@users.sf.net>
* generic/tclFCmd.c (TclFileAttrsCmd): Ensure that any reference to
diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c
index d5c6e9c..139b8f2 100755
--- a/generic/tclStrToD.c
+++ b/generic/tclStrToD.c
@@ -2668,7 +2668,7 @@ StrictQuickFormat(double d, /* Number to convert */
*/
inline static char*
-QuickConversion(double d, /* Number to format */
+QuickConversion(double e, /* Number to format */
int k, /* floor(log10(d)), approximately */
int k_check, /* 0 if k is exact, 1 if it may be too high */
int flags, /* Flags passed to dtoa:
@@ -2686,11 +2686,13 @@ QuickConversion(double d, /* Number to format */
char* retval; /* Returned string */
char* end; /* Pointer to the terminal null byte in the
* returned string */
+ volatile double d; /* Workaround for a bug in mingw gcc 3.4.5 */
/*
* Bring d into the range [1 .. 10)
*/
- ieps = AdjustRange(&d, k);
+ ieps = AdjustRange(&e, k);
+ d = e;
/*
* If the guessed value of k didn't get d into range, adjust it