Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2 / zend_strtod.c
| From: | Nuno Lopes | Date: | Mon, 28 Jul 2008 03:54:40 +0000 |
| Subject: | Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2 / zend_strtod.c | ||
| References: | 1 | Groups: | php.zend-engine.cvs |
| Request: | Send a blank email to php-zend-engine-cvs+get-6957@lists.php.net to get a copy of this message | ||
Do we really want to make this change?.. Volatile completely breaks
compiler optimizations, so I don't think it's worth to sacrifice most
users just because some are using a compiler that miscompiles this
file..
Nuno
On Sun, Jul 27, 2008 at 12:29, Dmitry Stogov <dmitry@php.net> wrote:
> 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;