free_alloca(worklist, use_heap);
}
-int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa)
+int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa, uint32_t t1, uint32_t t2)
{
- uint32_t t1 = OP1_INFO();
- uint32_t t2 = OP2_INFO();
-
if (opline->op1_type == IS_CV) {
if (t1 & MAY_BE_UNDEF) {
switch (opline->opcode) {
return 1;
}
}
+
+int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa)
+{
+ return zend_may_throw_ex(opline, ssa_op, op_array, ssa, OP1_INFO(), OP2_INFO());
+}
if (!zend_jit_assign_dim_op(&dasm_state, opline, op_array,
op1_info, op1_def_info, op1_addr, op2_info,
op1_data_info, OP1_DATA_RANGE(),
- zend_may_throw(opline, ssa_op, op_array, ssa))) {
+ zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) {
goto jit_failure;
}
goto done;
CHECK_OP1_DATA_TRACE_TYPE();
if (!zend_jit_assign_dim(&dasm_state, opline, op_array,
op1_info, op1_addr, op2_info, op1_data_info,
- zend_may_throw(opline, ssa_op, op_array, ssa))) {
+ zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) {
goto jit_failure;
}
goto done;
op1_def_info, op1_def_addr,
op2_info, op2_addr, op2_def_addr,
res_info, res_addr,
- zend_may_throw(opline, ssa_op, op_array, ssa))) {
+ zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info))) {
goto jit_failure;
}
goto done;
}
if (!zend_jit_isset_isempty_dim(&dasm_state, opline, op_array,
op1_info, op1_addr, op2_info,
- zend_may_throw(opline, ssa_op, op_array, ssa),
+ zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info),
smart_branch_opcode, -1, -1,
exit_addr)) {
goto jit_failure;
if (!zend_jit_fetch_obj(&dasm_state, opline, op_array,
op1_info, op1_addr, op1_indirect, ce, ce_is_instanceof,
delayed_fetch_this,
- zend_may_throw(opline, ssa_op, op_array, ssa))) {
+ zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, MAY_BE_STRING))) {
goto jit_failure;
}
goto done;