Unary minus const expression consistency

- of 0.0 should result in -0.0

Closes GH-10978
This commit is contained in:
Ilija Tovilo 2023-03-30 13:22:52 +02:00
parent 5e76c6d264
commit 41bbb116dd
No known key found for this signature in database
GPG key ID: A4F5D403F118200A
3 changed files with 21 additions and 2 deletions

3
NEWS
View file

@ -2,6 +2,9 @@ PHP NEWS
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? ????, PHP 8.1.19 ?? ??? ????, PHP 8.1.19
- Core:
. Fix inconsistent float negation in constant expressions. (ilutov)
- DOM: - DOM:
. Fixed bug #80602 (Segfault when using DOMChildNode::before()). . Fixed bug #80602 (Segfault when using DOMChildNode::before()).
(Nathan Freeman) (Nathan Freeman)

View file

@ -0,0 +1,16 @@
--TEST--
Unary minus constant expression consistency
--FILE--
<?php
const ZERO = 0.0;
const MINUS_ZERO = -ZERO;
$minus_zero = -ZERO;
var_dump(MINUS_ZERO);
var_dump($minus_zero);
?>
--EXPECT--
float(-0)
float(-0)

View file

@ -662,8 +662,8 @@ ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast
if (UNEXPECTED(zend_ast_evaluate(&op2, ast->child[0], scope) != SUCCESS)) { if (UNEXPECTED(zend_ast_evaluate(&op2, ast->child[0], scope) != SUCCESS)) {
ret = FAILURE; ret = FAILURE;
} else { } else {
ZVAL_LONG(&op1, 0); ZVAL_LONG(&op1, -1);
ret = sub_function(result, &op1, &op2); ret = mul_function(result, &op1, &op2);
zval_ptr_dtor_nogc(&op2); zval_ptr_dtor_nogc(&op2);
} }
break; break;