Fix bug on casting double to uint_64 #6067
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When 'v' is equal to 'std::numeric_limits<uint64_t>::max()', it should not be
casted to uint64_t, because there will be an overflow.
For x86_64 machines, the cast above results in overflow, but the result is
'0', i. e., the expected result.
Others platforms may not behave the same way, as tested on PPC64, that returns
'-1' for the same cast.
Looking for make HHVM behave the same way in both platforms, this change
returns '0' if the number going to be casted ('v') is equal to
'std::numeric_limits<uint64_t>::max()'. There is no behavior change for x86_64
platform.
See discussion: #5932.
PS: tested on php5 v5.6.9-1 on PPC64 and that result is also supposed to be ‘0’,
not ‘-1’.