Merge branch 'PHP-8.1'

* PHP-8.1:
  Fix relative offsets when copying JMPZNZ
This commit is contained in:
Nikita Popov 2021-09-27 16:20:21 +02:00
commit 2dd61521f2
2 changed files with 20 additions and 0 deletions

View file

@ -94,6 +94,10 @@ void zend_optimizer_pass3(zend_op_array *op_array, zend_optimizer_ctx *ctx)
ZVAL_COPY(&zv, &ZEND_OP1_LITERAL(opline));
opline->op1.constant = zend_optimizer_add_literal(op_array, &zv);
}
/* Jump addresses may be encoded as offsets, recompute them. */
ZEND_SET_OP_JMP_ADDR(opline, opline->op2, ZEND_OP2_JMP_ADDR(target));
opline->extended_value = ZEND_OPLINE_TO_OFFSET(opline,
ZEND_OFFSET_TO_OPLINE(target, target->extended_value));
goto optimize_jmpznz;
} else if ((target->opcode == ZEND_RETURN ||
target->opcode == ZEND_RETURN_BY_REF ||

View file

@ -0,0 +1,16 @@
--TEST--
Check for correct treatment of relative JMPZNZ offsets when copying opline
--FILE--
<?php
function test($c) {
L1:
if ($c) {
goto L1;
goto L1;
}
}
test(false);
?>
===DONE===
--EXPECT--
===DONE===