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 invalid target opline with jit->reuse_ip active (php#16457)
  • Loading branch information
dstogov committed Oct 18, 2024
2 parents 42e179e + 8b5668e commit e61e2c1
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
16 changes: 16 additions & 0 deletions ext/opcache/jit/zend_jit_ir.c
Original file line number Diff line number Diff line change
Expand Up @@ -8809,6 +8809,14 @@ jit_SET_EX_OPLINE(jit, opline);
delayed_call_chain = 1;
}

if (trace
&& trace->op == ZEND_JIT_TRACE_END
&& trace->stop >= ZEND_JIT_TRACE_STOP_INTERPRETER) {
if (!zend_jit_set_ip(jit, opline + 1)) {
return 0;
}
}

return 1;
}

Expand Down Expand Up @@ -9254,6 +9262,14 @@ static int zend_jit_init_static_method_call(zend_jit_ctx *jit,
delayed_call_chain = 1;
}

if (trace
&& trace->op == ZEND_JIT_TRACE_END
&& trace->stop >= ZEND_JIT_TRACE_STOP_INTERPRETER) {
if (!zend_jit_set_ip(jit, opline + 1)) {
return 0;
}
}

return 1;
}

Expand Down
31 changes: 31 additions & 0 deletions ext/opcache/tests/jit/init_fcall_004.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
--TEST--
JIT INIT_FCALL: 004 Invalid target opline with jit->reuse_ip active
--INI--
opcache.enable=1
opcache.enable_cli=1
--EXTENSIONS--
opcache
--FILE--
<?php

function gen() {
yield 1;
yield 2;
return 3;
};

opcache_jit_blacklist(gen(...));

for ($i = 0; $i < 2; ++$i) {
foreach (gen() as $val) {
var_dump($val);
}
}
?>
DONE
--EXPECT--
int(1)
int(2)
int(1)
int(2)
DONE

0 comments on commit e61e2c1

Please sign in to comment.