Hi!
I wanted to ask people here about this patch. See history in
http://bugs.php.net/bug.php?id=43487 but basically there's some gcc out
there that miscompiles zend_strtod.c. We can fix it, probably at some
marginal performance cost, but the question is - should we? It's pre-release
compiler and not in the latest version.
So can anyone using non-prerelease gcc of any recent version - or non-gcc
compiler even - reproduce this? Should we keep the change or just tell
people "use working compiler"?
-------- Original Message --------
Subject: [ZEND-ENGINE-CVS] cvs: ZendEngine2 / zend_strtod.c
Date: Sun, 27 Jul 2008 11:29:59 -0000
From: Dmitry Stogov <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
dmitry Sun Jul 27 11:29:59 2008 UTC
Modified files:
/ZendEngine2 zend_strtod.c
Log:
Fix for bug #43487 (Wrong conversion of float to string)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_strtod.c?r1=1.37&r2=1.38&diff_format=u
Index: ZendEngine2/zend_strtod.c
diff -u ZendEngine2/zend_strtod.c:1.37 ZendEngine2/zend_strtod.c:1.38
--- ZendEngine2/zend_strtod.c:1.37 Wed Mar 26 14:23:02 2008
+++ ZendEngine2/zend_strtod.c Sun Jul 27 11:29:59 2008
@@ -89,7 +89,7 @@
* directly -- and assumed always to succeed.
*/
-/* $Id: zend_strtod.c,v 1.37 2008/03/26 14:23:02 scottmac Exp $ */
+/* $Id: zend_strtod.c,v 1.38 2008/07/27 11:29:59 dmitry Exp $ */
#include <zend.h>
#include <unicode/utypes.h>
@@ -991,9 +991,9 @@
static double ulp (double _x) /* {{{ */
{
- _double x;
+ volatile _double x;
register Long L;
- _double a;
+ volatile _double a;
value(x) = _x;
L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
@@ -1035,7 +1035,7 @@
{
ULong *xa, *xa0, w, y, z;
int k;
- _double d;
+ volatile _double d;
#ifdef VAX
ULong d0, d1;
#else
@@ -1101,7 +1101,7 @@
Bigint *b;
int de, i, k;
ULong *x, y, z;
- _double d;
+ volatile _double d;
#ifdef VAX
ULong d0, d1;
#endif
@@ -1223,7 +1223,7 @@
static double ratio (Bigint *a, Bigint *b) /* {{{ */
{
- _double da, db;
+ volatile _double da, db;
int k, ka, kb;
value(da) = b2d(a, &ka);
@@ -1492,7 +1492,7 @@
Bigint *b, *b1, *delta, *mlo, *mhi, *S, *tmp;
double ds;
char *s, *s0;
- _double d, d2, eps;
+ volatile _double d, d2, eps;
value(d) = _d;
@@ -2056,7 +2056,7 @@
e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
CONST char *s, *s0, *s1;
double aadj, aadj1, adj;
- _double rv, rv0;
+ volatile _double rv, rv0;
Long L;
ULong y, z;
Bigint *bb, *bb1, *bd, *bd0, *bs, *delta, *tmp;
--
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
--
Stanislav Malyshev, Zend Software Architect
[EMAIL PROTECTED] http://www.zend.com/
(408)253-8829 MSN: [EMAIL PROTECTED]
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php