mirror of
https://github.com/php/php-src.git
synced 2024-09-21 09:57:23 +00:00
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1: Fix compile-time optimization of NAN comparisons
This commit is contained in:
commit
e23c132940
@ -2174,6 +2174,16 @@ ZEND_API int ZEND_FASTCALL is_not_equal_function(zval *result, zval *op1, zval *
|
||||
|
||||
ZEND_API int ZEND_FASTCALL is_smaller_function(zval *result, zval *op1, zval *op2) /* {{{ */
|
||||
{
|
||||
if (UNEXPECTED((Z_TYPE_P(op1) == IS_DOUBLE) && isnan(Z_DVAL_P(op1)))) {
|
||||
ZVAL_FALSE(result);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (UNEXPECTED((Z_TYPE_P(op2) == IS_DOUBLE) && isnan(Z_DVAL_P(op2)))) {
|
||||
ZVAL_FALSE(result);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (compare_function(result, op1, op2) == FAILURE) {
|
||||
return FAILURE;
|
||||
}
|
||||
@ -2184,6 +2194,16 @@ ZEND_API int ZEND_FASTCALL is_smaller_function(zval *result, zval *op1, zval *op
|
||||
|
||||
ZEND_API int ZEND_FASTCALL is_smaller_or_equal_function(zval *result, zval *op1, zval *op2) /* {{{ */
|
||||
{
|
||||
if (UNEXPECTED((Z_TYPE_P(op1) == IS_DOUBLE) && isnan(Z_DVAL_P(op1)))) {
|
||||
ZVAL_FALSE(result);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (UNEXPECTED((Z_TYPE_P(op2) == IS_DOUBLE) && isnan(Z_DVAL_P(op2)))) {
|
||||
ZVAL_FALSE(result);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (compare_function(result, op1, op2) == FAILURE) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
29
tests/lang/operators/nan-comparison-false.phpt
Normal file
29
tests/lang/operators/nan-comparison-false.phpt
Normal file
@ -0,0 +1,29 @@
|
||||
--TEST--
|
||||
Comparisons with NAN should yield false, even at compile-time
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
echo "** CONST\n";
|
||||
var_dump(0 < NAN);
|
||||
var_dump(0 <= NAN);
|
||||
var_dump(0 > NAN);
|
||||
var_dump(0 >= NAN);
|
||||
|
||||
echo "** VAR\n";
|
||||
$nan = NAN;
|
||||
var_dump(0 < $nan);
|
||||
var_dump(0 <= $nan);
|
||||
var_dump(0 > $nan);
|
||||
var_dump(0 >= $nan);
|
||||
|
||||
--EXPECT--
|
||||
** CONST
|
||||
bool(false)
|
||||
bool(false)
|
||||
bool(false)
|
||||
bool(false)
|
||||
** VAR
|
||||
bool(false)
|
||||
bool(false)
|
||||
bool(false)
|
||||
bool(false)
|
Loading…
Reference in New Issue
Block a user