mirror of
https://github.com/php/php-src.git
synced 2024-11-28 12:26:37 +08:00
Fix off by one in short_circuiting optimization
This commit is contained in:
parent
b7e477a8f9
commit
37c91b8d03
@ -5842,7 +5842,7 @@ void zend_compile_short_circuiting(znode *result, zend_ast *ast) /* {{{ */
|
|||||||
|
|
||||||
if (left_node.op_type == IS_CONST) {
|
if (left_node.op_type == IS_CONST) {
|
||||||
if ((ast->kind == ZEND_AST_AND && !zend_is_true(&left_node.u.constant))
|
if ((ast->kind == ZEND_AST_AND && !zend_is_true(&left_node.u.constant))
|
||||||
|| (ast->kind == ZEND_AST_OR && zend_is_true(&left_node.u.constant))) {
|
|| (ast->kind == ZEND_AST_OR && zend_is_true(&left_node.u.constant))) {
|
||||||
result->op_type = IS_CONST;
|
result->op_type = IS_CONST;
|
||||||
ZVAL_BOOL(&result->u.constant, zend_is_true(&left_node.u.constant));
|
ZVAL_BOOL(&result->u.constant, zend_is_true(&left_node.u.constant));
|
||||||
} else {
|
} else {
|
||||||
@ -5875,9 +5875,9 @@ void zend_compile_short_circuiting(znode *result, zend_ast *ast) /* {{{ */
|
|||||||
|
|
||||||
zend_compile_expr(&right_node, right_ast);
|
zend_compile_expr(&right_node, right_ast);
|
||||||
|
|
||||||
if (right_node.op_type == IS_CONST && opnum_jmpz == CG(active_op_array)->last) {
|
if (right_node.op_type == IS_CONST && opnum_jmpz == get_next_op_number(CG(active_op_array)) - 1) {
|
||||||
if ((ast->kind == ZEND_AST_AND && !zend_is_true(&right_node.u.constant))
|
if ((ast->kind == ZEND_AST_AND && !zend_is_true(&right_node.u.constant))
|
||||||
|| (ast->kind == ZEND_AST_OR && zend_is_true(&right_node.u.constant))) {
|
|| (ast->kind == ZEND_AST_OR && zend_is_true(&right_node.u.constant))) {
|
||||||
CG(active_op_array)->last--;
|
CG(active_op_array)->last--;
|
||||||
result->op_type = IS_CONST;
|
result->op_type = IS_CONST;
|
||||||
ZVAL_BOOL(&result->u.constant, zend_is_true(&right_node.u.constant));
|
ZVAL_BOOL(&result->u.constant, zend_is_true(&right_node.u.constant));
|
||||||
|
Loading…
Reference in New Issue
Block a user