| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|\ |
|
| |
| |
| |
| |
| |
| | |
The 'result' argument of fast_add_function() may alias with either
of its operands (or both). Take care not to write to 'result' before
reading op1 and op2.
|
|\ \
| |/
| |
| |
| | |
* PHP-5.4:
permanently deactivate that place, not on runtime only
|
| |
| |
| |
| |
| | |
besides the two "if" checks, this fixes static analyze which is sometimes
broken because of this
|
| |
| |
| |
| |
| |
| |
| |
| | |
warning: 'local_dval' may be used uninitialized in this function
[-Wmaybe-uninitialized]
warning: 'dval2' may be used uninitialized in this function
[-Wmaybe-uninitialized]
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A recent change (by me) introduced a call to __builtin_offsetof()
into zend_operators.h which is not defined by GCC prior to
version 4.
Changed the code to use offsetof() instead: this is defined in
<stddef.h>, so #include this header conditionally (#ifdef GNUC)
|
| |
| |
| |
| |
| |
| | |
Now rounding is always towards zero; the rounding can be though as if
occurring on the original double. Only relevant for the 32-bit long
variant.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
PHP should preserve the least significant bits when casting from double
to long. Zend.m4 contains this:
AC_DEFINE([ZEND_DVAL_TO_LVAL_CAST_OK], 1, [Define if double cast to long preserves least significant bits])
If ZEND_DVAL_TO_LVAL_CAST_OK is not defined, zend_operators.h had an
inline implementation of zend_dval_to_lval() that would do a cast to an
int64_t (when sizeof(long) == 4), then a cast to unsigned long and
finally the cast to long.
While this works well for doubles inside the range of values of the type
used in the first cast (int64_t in the 32-bit version and unsigned long
in the 64-bit version), if outside the range, it is undefined behavior
that WILL give varying and not particularly useful results.
This commit uses fmod() to first put the double in a range that can
safely be cast to unsigned long and then casts this unsigned long to
long. This last cast is implementation defined, but it's very likely
that this gives the expected result (i.e. the internal 2's complement
representation is unchanged) on all platforms that PHP supports. In any
case, the previous implementationa already had this assumption.
This alternative code path is indeed significantly slower than simply
casting the double (almost an order of magnitude), but that should not
matter because casting doubles with a very high absolute value is a
rare event.
|
| |
| |
| |
| |
| |
| |
| | |
- added cc annotation to inline asm that clobbers the condition
flags
- remove hardcoded constants (IS_LONG,IS_DOUBLE)
- remove hardcoded offsets (zval->value, zval->type)
|
|\ \
| |/
| |
| |
| | |
* PHP-5.4:
Fixed bug #64142 (dval to lval different behavior on ppc64)
|
| |
| |
| |
| |
| | |
See discussion on internals
http://marc.info/?t=136042277700003&r=1&w=2
|
|\ \
| |/
| |
| |
| | |
* PHP-5.4:
revert
|
| | |
|
|\ \
| |/
| |
| |
| | |
* PHP-5.4:
Fixed bug #64142 (dval to lval different behavior on ppc64)
|
| |
| |
| |
| |
| |
| |
| | |
On x86_64:
(long)(double)9223372036854775807+1 = -9223372036854775808
On ppc64
(long)(double)9223372036854775807-1 = 9223372036854775807
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| | |
(patch by Arpad Ray).
|
| | |
|
| |
| |
| |
| | |
(http://llvm.org/bugs/show_bug.cgi?id=9164). Tested with GCC and Clang on Darwin and Ubuntu.
|
| | |
|
| | |
|
| |
| |
| |
| | |
operations directly into executor.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| | |
(patch by Arpad Ray).
|
| | |
|
| | |
|
| |
| |
| |
| | |
the details) for BC reasons but do not allow to set enable MQ
|
| | |
|
| | |
|
|/
|
|
| |
operations directly into executor.
|
| |
|
|
|
|
|
|
| |
places where strings pointed to are not modified
to prevent compiler warnings about discarded qualifiers ...
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Restored double->long conversion behavior to that of PHP 5.2 (on most platforms) and prior:
* Out-of-range numbers overflow/preserve least significant bits (no LONG_MAX/MIN limit)
* See bug #42868 (presumably-rare platform with different results in 5.2)
* On 32-bit platforms with 64-bit long type, a zend_long64 cast has been added,
otherwise it's the same as 5.2
* Use this conversion method everywhere instead of some plain (long) casts
Added 'L' parameter parsing specifier to ensure a LONG_MAX/MIN limit:
* Essentially what 5.3's new conversion was doing in most cases
* Functions with "limit" or "length" type params could be updated to use this,
and prevent confusing overflow behavior with huge numbers (*also* in 5.2)
- See bug #47854, for example; or even #42868 again
# Test updates coming
|
| |
|
| |
|
|
|
|
|
|
| |
- Fixed bug #46701 (Creating associative array with long values in the key fails on 32bit linux)
Patch by Shire
|
| |
|
| |
|
| |
|