[php-src] PHP-8.4: JIT: Fix operand type check in zend_redo_pass_two_ex() (#24658)
| From: | Weilin Du via GitHub | Date: | Sat, 24 Oct 2026 17:48:08 +0000 |
| Subject: | [php-src] PHP-8.4: JIT: Fix operand type check in zend_redo_pass_two_ex() (#24658) | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-142690@lists.php.net to get a copy of this message | ||
Author: Weilin Du (LamentXU123)
Committer: GitHub (web-flow)
Pusher: LamentXU123
Date: 2026-10-25T01:48:05+08:00
Commit: https://github.com/php/php-src/commit/755f9d9a2bed685fe1241fe034a6a66f8c072802
Raw diff: https://github.com/php/php-src/commit/755f9d9a2bed685fe1241fe034a6a66f8c072802.diff
JIT: Fix operand type check in zend_redo_pass_two_ex() (#24658)
op2_info should depend on opline->op2_type and has nothing to do with opline->op1_type.
Changed paths:
M Zend/Optimizer/zend_optimizer.c
Diff:
diff --git a/Zend/Optimizer/zend_optimizer.c b/Zend/Optimizer/zend_optimizer.c
index 9017572118e2..77af67fe6d73 100644
--- a/Zend/Optimizer/zend_optimizer.c
+++ b/Zend/Optimizer/zend_optimizer.c
@@ -1359,7 +1359,7 @@ static void zend_redo_pass_two_ex(zend_op_array *op_array, zend_ssa *ssa)
while (opline < end) {
zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes];
uint32_t op1_info = opline->op1_type == IS_UNUSED ? 0 : (OP1_INFO() &
(MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_KEY_ANY));
- uint32_t op2_info = opline->op1_type == IS_UNUSED ? 0 : (OP2_INFO() &
(MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_KEY_ANY));
+ uint32_t op2_info = opline->op2_type == IS_UNUSED ? 0 : (OP2_INFO() &
(MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_KEY_ANY));
uint32_t res_info =
(opline->opcode == ZEND_PRE_INC ||
opline->opcode == ZEND_PRE_DEC ||