Bug #64142 [Csd]: dval to lval different behavior on ppc64
| From: | cataphract@php.net | Date: | Tue, 05 Feb 2013 11:05:02 +0000 |
| Subject: | Bug #64142 [Csd]: dval to lval different behavior on ppc64 | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-176450@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=64142&edit=1
ID: 64142
Updated by: cataphract@php.net
Reported by: remi@php.net
Summary: dval to lval different behavior on ppc64
Status: Closed
Type: Bug
Package: *General Issues
Operating System: GNU/Linux
PHP Version: 5.4.11
Assigned To: remi
Block user comment: N
Private report: N
New Comment:
The commit message says:
> On x86_64:
> (long)(double)9223372036854775807+1 = -9223372036854775808
> On ppc64
> (long)(double)9223372036854775807-1 = 9223372036854775807
How much is (long)(double)0x7fffffffffffffffL in that arch? Is it 0x7ffffffffffffffeL ?
The closest doubles near 0x7fffffffffffffff are 0x8000000000000000 and 0x7ffffffffffffffe. So
basically ppp64 rounds down while x64 rounds up? If that's the case, there's nothing to
"fix" in the code; you'll presumably get this behavior in a lot of other places, not
just when casting LONG_MAX to double.
But in any case, I don't see how that is relevant to the patch. The patch changes a (long)dval
cast to (long)(unsigned long)dval cast, which is a double-to-long cast, not a long-to-double cast.
Previous Comments:
------------------------------------------------------------------------
[2013-02-05 07:19:18] remi@php.net
Automatic comment on behalf of remi
Revision: http://git.php.net/?p=php-src.git;a=commit;h=6533094d9e4d0c85044a170d9fad9a3986a68675
Log: Fixed bug #64142 (dval to lval different behavior on ppc64)
------------------------------------------------------------------------
[2013-02-05 01:16:05] rasmus@php.net
You should be able to commit it now
------------------------------------------------------------------------
[2013-02-04 14:32:57] remi@php.net
It seems I cannot commit this fix (You have insufficient Karma!)
Notice:
No regression detection on x86_64 (no failed test)
On ppc64 we now have only 16 failed tests (instead of 25)
------------------------------------------------------------------------
[2013-02-04 14:30:17] remi@php.net
The following patch has been added/updated:
Patch Name: 0001-Fixed-bug-64142-dval-to-lval-different-behavior-on-p.patch
Revision: 1359988217
URL: https://bugs.php.net/patch-display.php?bug=64142&patch=0001-Fixed-bug-64142-dval-to-lval-different-behavior-on-p.patch&revision=1359988217
------------------------------------------------------------------------
[2013-02-04 14:15:11] remi@php.net
Description:
------------
zend_dval_to_lval have different result on x86_64 and ppc64 (and probably other arch)
This cause some test failure:
Test & operator : 64bit long tests [tests/lang/operators/bitwiseAnd_basiclong_64bit.phpt]
Test ~N operator : 64bit long tests [tests/lang/operators/bitwiseNot_basiclong_64bit.phpt]
Test | operator : 64bit long tests [tests/lang/operators/bitwiseOr_basiclong_64bit.phpt]
Test ^ operator : 64bit long tests [tests/lang/operators/bitwiseXor_basiclong_64bit.phpt]
Test % operator : 64bit long tests [tests/lang/operators/modulus_basiclong_64bit.phpt]
Test decbin function : 64bit long tests [ext/standard/tests/math/decbin_basiclong_64bit.phpt]
Test dechex function : 64bit long tests [ext/standard/tests/math/dechex_basiclong_64bit.phpt]
Test decoct function : 64bit long tests [ext/standard/tests/math/decoct_basiclong_64bit.phpt]
Test chunk_split() function : usage variations - unexpected values for 'chunklen'
argument(Bug#42796) [ext/standard/tests/strings/chunk_split_variation2.phpt]
Test script:
---------------
php -r 'printf("%ld\n", 0x7fffffffffffffff);'
php -r 'printf("%ld\n", 0x7fffffffffffffff+1);'
Expected result:
----------------
9223372036854775807
-9223372036854775808
Actual result:
--------------
9223372036854775807
9223372036854775807
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64142&edit=1