Edit report at https://bugs.php.net/bug.php?id=64142&edit=1

 ID:                 64142
 Updated by:         cataphr...@php.net
 Reported by:        r...@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] r...@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] ras...@php.net

You should be able to commit it now

------------------------------------------------------------------------
[2013-02-04 14:32:57] r...@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] r...@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] r...@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

Reply via email to