summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2020-11-16 13:19:44 +0300
committerDmitry Stogov <dmitry@zend.com>2020-11-16 13:19:44 +0300
commitbd321df47925db2186d6a95e16e9ebca036b08ca (patch)
tree1e3c73a764d6605780e136cf69de925c11d1cc99
parent64dc79f90649f2ca3522ae8d658da4d5707dba29 (diff)
downloadphp-git-bd321df47925db2186d6a95e16e9ebca036b08ca.tar.gz
Fixed inconsistent VM stack state
-rw-r--r--ext/opcache/jit/zend_jit_x86.dasc5
1 files changed, 4 insertions, 1 deletions
diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc
index 42b0e1940c..8b61d5b092 100644
--- a/ext/opcache/jit/zend_jit_x86.dasc
+++ b/ext/opcache/jit/zend_jit_x86.dasc
@@ -10092,7 +10092,10 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
if (JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE ||
!JIT_G(current_frame) ||
!JIT_G(current_frame)->call ||
- !TRACE_FRAME_IS_NESTED(JIT_G(current_frame)->call)) {
+ !TRACE_FRAME_IS_NESTED(JIT_G(current_frame)->call) ||
+ prev_opline->opcode == ZEND_SEND_UNPACK ||
+ prev_opline->opcode == ZEND_SEND_ARRAY ||
+ prev_opline->opcode == ZEND_CHECK_UNDEF_ARGS) {
| // zend_vm_stack_free_call_frame(call);
| test byte [RX + offsetof(zend_execute_data, This.u1.type_info) + 2], (ZEND_CALL_ALLOCATED >> 16)