diff --git a/ext/opcache/jit/zend_jit_arm64.dasc b/ext/opcache/jit/zend_jit_arm64.dasc index b64711b59fb..3a74fdc47f6 100644 --- a/ext/opcache/jit/zend_jit_arm64.dasc +++ b/ext/opcache/jit/zend_jit_arm64.dasc @@ -3357,6 +3357,12 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1); } break; + case ZEND_BIND_INIT_STATIC_OR_JMP: + if (opline->op1_type == IS_CV) { + old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var)); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), IS_UNKNOWN, 1); + } + break; } if (opline->result_type == IS_VAR || opline->result_type == IS_TMP_VAR) { @@ -3376,6 +3382,11 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var), old_info); } break; + case ZEND_BIND_INIT_STATIC_OR_JMP: + if (opline->op1_type == IS_CV) { + SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_info); + } + break; } if (!exit_addr) { diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index c340d710cde..8186f206dfe 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -3710,6 +3710,12 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1); } break; + case ZEND_BIND_INIT_STATIC_OR_JMP: + if (opline->op1_type == IS_CV) { + old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var)); + SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op1.var), IS_UNKNOWN, 1); + } + break; } if (opline->result_type == IS_VAR || opline->result_type == IS_TMP_VAR) { @@ -3729,6 +3735,11 @@ static int zend_jit_trace_handler(dasm_State **Dst, const zend_op_array *op_arra SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var), old_info); } break; + case ZEND_BIND_INIT_STATIC_OR_JMP: + if (opline->op1_type == IS_CV) { + SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_info); + } + break; } if (!exit_addr) { diff --git a/ext/opcache/tests/jit/bind_static_002.phpt b/ext/opcache/tests/jit/bind_static_002.phpt new file mode 100644 index 00000000000..b3b414b6559 --- /dev/null +++ b/ext/opcache/tests/jit/bind_static_002.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bind static deoptimization +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +--FILE-- + +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(true) +bool(true)