Merge remote-tracking branch 'upstream/PHP-8.0' into PHP-8.1

This commit is contained in:
zeriyoshi 2022-08-05 00:06:04 +09:00
commit 2d777466c0
4 changed files with 2 additions and 48 deletions

1
NEWS
View file

@ -4,6 +4,7 @@ PHP NEWS
- Core: - Core:
. Fixed --CGI-- support of run-tests.php. (cmb) . Fixed --CGI-- support of run-tests.php. (cmb)
. Fixed incorrect double to long casting in latest clang. (zeriyoshi)
- Date: - Date:
. Fixed bug GH-8730 (DateTime::diff miscalculation is same time zone of . Fixed bug GH-8730 (DateTime::diff miscalculation is same time zone of

View file

@ -149,40 +149,6 @@ dnl Checks for library functions.
AC_CHECK_FUNCS(getpid kill sigsetjmp) AC_CHECK_FUNCS(getpid kill sigsetjmp)
ZEND_CHECK_FLOAT_PRECISION ZEND_CHECK_FLOAT_PRECISION
dnl Test whether double cast to long preserves least significant bits.
AC_MSG_CHECKING(whether double cast to long preserves least significant bits)
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <limits.h>
#include <stdlib.h>
int main()
{
if (sizeof(long) == 4) {
double d = (double) LONG_MIN * LONG_MIN + 2e9;
if ((long) d == 2e9 && (long) -d == -2e9) {
return 0;
}
} else if (sizeof(long) == 8) {
double correct = 18e18 - ((double) LONG_MIN * -2); /* Subtract ULONG_MAX + 1 */
if ((long) 18e18 == correct) { /* On 64-bit, only check between LONG_MAX and ULONG_MAX */
return 0;
}
}
return 1;
}
]])], [
AC_DEFINE([ZEND_DVAL_TO_LVAL_CAST_OK], 1, [Define if double cast to long preserves least significant bits])
AC_MSG_RESULT(yes)
], [
AC_MSG_RESULT(no)
], [
AC_MSG_RESULT(no)
])
]) ])
dnl dnl

View file

@ -3396,8 +3396,7 @@ ZEND_API const char* ZEND_FASTCALL zend_memnrstr_ex(const char *haystack, const
} }
/* }}} */ /* }}} */
#ifndef ZEND_DVAL_TO_LVAL_CAST_OK #if SIZEOF_ZEND_LONG == 4
# if SIZEOF_ZEND_LONG == 4
ZEND_API zend_long ZEND_FASTCALL zend_dval_to_lval_slow(double d) /* {{{ */ ZEND_API zend_long ZEND_FASTCALL zend_dval_to_lval_slow(double d) /* {{{ */
{ {
double two_pow_32 = pow(2., 32.), double two_pow_32 = pow(2., 32.),
@ -3427,4 +3426,3 @@ ZEND_API zend_long ZEND_FASTCALL zend_dval_to_lval_slow(double d)
} }
/* }}} */ /* }}} */
#endif #endif
#endif

View file

@ -99,16 +99,6 @@ ZEND_API const char* ZEND_FASTCALL zend_memnrstr_ex(const char *haystack, const
# define ZEND_DOUBLE_FITS_LONG(d) (!((d) >= (double)ZEND_LONG_MAX || (d) < (double)ZEND_LONG_MIN)) # define ZEND_DOUBLE_FITS_LONG(d) (!((d) >= (double)ZEND_LONG_MAX || (d) < (double)ZEND_LONG_MIN))
#endif #endif
#ifdef ZEND_DVAL_TO_LVAL_CAST_OK
static zend_always_inline zend_long zend_dval_to_lval(double d)
{
if (EXPECTED(zend_finite(d)) && EXPECTED(!zend_isnan(d))) {
return (zend_long)d;
} else {
return 0;
}
}
#else
ZEND_API zend_long ZEND_FASTCALL zend_dval_to_lval_slow(double d); ZEND_API zend_long ZEND_FASTCALL zend_dval_to_lval_slow(double d);
static zend_always_inline zend_long zend_dval_to_lval(double d) static zend_always_inline zend_long zend_dval_to_lval(double d)
@ -120,7 +110,6 @@ static zend_always_inline zend_long zend_dval_to_lval(double d)
} }
return (zend_long)d; return (zend_long)d;
} }
#endif
/* Used to convert a string float to integer during an (int) cast */ /* Used to convert a string float to integer during an (int) cast */
static zend_always_inline zend_long zend_dval_to_lval_cap(double d) static zend_always_inline zend_long zend_dval_to_lval_cap(double d)