Skip to content

Commit

Permalink
Merge branch 'PHP-8.4'
Browse files Browse the repository at this point in the history
* PHP-8.4:
  Fix GH-17428: Assertion failure ext/opcache/jit/zend_jit_ir.c:8940
  • Loading branch information
nielsdos committed Jan 14, 2025
2 parents a4e2583 + 3524702 commit 650e59a
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
6 changes: 3 additions & 3 deletions ext/opcache/jit/zend_jit.c
Original file line number Diff line number Diff line change
Expand Up @@ -2760,8 +2760,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
/* THROW and EXIT may be used in the middle of BB */
/* don't generate code for the rest of BB */

/* Skip current opline for call_level computation
* Don't include last opline because end of loop already checks call level of last opline */
/* Skip current opline for call_level computation because it does not influence call_level.
* Don't include last opline because end of loop already checks call level of last opline. */
i++;
for (; i < end; i++) {
opline = op_array->opcodes + i;
Expand All @@ -2771,7 +2771,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
call_level--;
}
}
opline = op_array->opcodes + i;
opline = op_array->opcodes + end;
break;
/* stackless execution */
case ZEND_INCLUDE_OR_EVAL:
Expand Down
35 changes: 35 additions & 0 deletions ext/opcache/tests/jit/gh17428.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
--TEST--
GH-17428 (Assertion failure ext/opcache/jit/zend_jit_ir.c:8940)
--EXTENSIONS--
opcache
--INI--
opcache.jit=1205
--FILE--
<?php
new EmptyIterator();
srand(1000);
error_reporting(E_ALL);
testConversion('', '');
testConversion('', '');
testConversion('', '');
testConversion('', '');
testConversion('', '');
function testRoundTrip($data) {
}
for ($iterations = 0; $iterations < 100; $iterations++) {
$strlen = rand(1, 100);
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randstring = '';
for ($i = 0; $i < $strlen; $i++) {
$randstring .= $characters[rand(0, strlen($characters) - 1)];
}
die($randstring);
}
echo "Done!\n";
throw new Hello(new stdClass);
?>
--EXPECTF--
Fatal error: Uncaught Error: Call to undefined function testConversion() in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d

0 comments on commit 650e59a

Please sign in to comment.