]> granicus.if.org Git - php/commitdiff
Merge zend_may_throw(_ex)
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 16 Mar 2020 11:23:55 +0000 (12:23 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 16 Mar 2020 11:24:40 +0000 (12:24 +0100)
Explicitly pass ssa_op in the places that don't do so yet.

ext/opcache/Optimizer/dce.c
ext/opcache/Optimizer/sccp.c
ext/opcache/Optimizer/zend_inference.c
ext/opcache/Optimizer/zend_inference.h
ext/opcache/jit/zend_jit.c
ext/opcache/jit/zend_jit_trace.c
ext/opcache/jit/zend_jit_x86.dasc

index d5a7f5a192f7467fd38c65e48f7472a11bb09c11..43f2ef71a242b321252a07a57c1af8ef8a9c0aeb 100644 (file)
@@ -532,7 +532,7 @@ int dce_optimize_op_array(zend_op_array *op_array, zend_ssa *ssa, zend_bool reor
                                        add_operands_to_worklists(&ctx, &op_array->opcodes[op_data], &ssa->ops[op_data], ssa, 0);
                                }
                        } else if (may_have_side_effects(op_array, ssa, &op_array->opcodes[i], &ssa->ops[i], ctx.reorder_dtor_effects)
-                                       || zend_may_throw(&op_array->opcodes[i], op_array, ssa)
+                                       || zend_may_throw(&op_array->opcodes[i], &ssa->ops[i], op_array, ssa)
                                        || (has_varargs && may_break_varargs(op_array, ssa, &ssa->ops[i]))) {
                                if (op_array->opcodes[i].opcode == ZEND_NEW
                                                && op_array->opcodes[i+1].opcode == ZEND_DO_FCALL
index 0c62e1bd0d57001f116424e489d1a3bb5909b745..e72a38f43fc6b9f4696cb7b2c54e837a459cb9ab 100644 (file)
@@ -2335,7 +2335,7 @@ static int try_remove_definition(sccp_ctx *ctx, int var_num, zend_ssa_var *var,
                                                }
                                                break;
                                        default:
-                                               if (zend_may_throw(opline, op_array, ssa)) {
+                                               if (zend_may_throw(opline, ssa_op, op_array, ssa)) {
                                                        return 0;
                                                }
                                                break;
index 0dc6ab477d17feeb36c84b76ee67c0f8618467c7..6cbd5531656bcb10f42fa9d3b21f1bc91652a289 100644 (file)
@@ -4254,7 +4254,7 @@ void zend_inference_check_recursive_dependencies(zend_op_array *op_array)
        free_alloca(worklist, use_heap);
 }
 
-int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa)
+int zend_may_throw(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa)
 {
        uint32_t t1 = OP1_INFO_EX();
        uint32_t t2 = OP2_INFO_EX();
@@ -4365,7 +4365,7 @@ int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const ze
                        return 0;
                case ZEND_BIND_GLOBAL:
                        if ((opline+1)->opcode == ZEND_BIND_GLOBAL) {
-                               return zend_may_throw_ex(opline + 1, ssa_op + 1, op_array, ssa);
+                               return zend_may_throw(opline + 1, ssa_op + 1, op_array, ssa);
                        }
                        return 0;
                case ZEND_ADD:
@@ -4589,8 +4589,3 @@ int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const ze
                        return 1;
        }
 }
-
-int zend_may_throw(const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa)
-{
-       return zend_may_throw_ex(opline, &ssa->ops[opline - op_array->opcodes], op_array, ssa);
-}
index c5db1feede6e8c903b5f1e2d2639ca7f0ea93737..3fb3b4f001fd369bf85ff958d784eca2ebbdcbad 100644 (file)
@@ -320,8 +320,7 @@ void zend_func_return_info(const zend_op_array   *op_array,
                            int                    widening,
                            zend_ssa_var_info     *ret);
 
-int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, const zend_op_array *op_array, zend_ssa *ssa);
-int zend_may_throw(const zend_op *opline, const zend_op_array *op_array, zend_ssa *ssa);
+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_update_type_info(const zend_op_array *op_array,
                           zend_ssa            *ssa,
index 7b13d3ce54ad6d3456677f2a7e19ff8b2e2a3efb..a265cf480670a3683f91724e6e06cca360e991c0 100644 (file)
@@ -2149,6 +2149,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                }
                end = ssa->cfg.blocks[b].start + ssa->cfg.blocks[b].len - 1;
                for (i = ssa->cfg.blocks[b].start; i <= end; i++) {
+                       zend_ssa_op *ssa_op = &ssa->ops[i];
                        opline = op_array->opcodes + i;
                        switch (opline->opcode) {
                                case ZEND_INIT_FCALL:
@@ -2231,7 +2232,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                                op2_info, OP2_RANGE(), OP2_REG_ADDR(),
                                                                res_use_info, RES_INFO(), res_addr,
                                                                send_result,
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2272,7 +2273,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                                res_use_info, res_info, res_addr,
                                                                send_result,
                                                                (res_info & MAY_BE_LONG) && (res_info & MAY_BE_DOUBLE) && zend_may_overflow(opline, op_array, ssa),
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2302,7 +2303,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                }
                                                if (!zend_jit_concat(&dasm_state, opline, op_array,
                                                                op1_info, op2_info, RES_INFO(), send_result,
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2352,7 +2353,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                                op1_info, op1_def_info, OP1_RANGE(),
                                                                op2_info, OP2_RANGE(),
                                                                (op1_def_info & MAY_BE_LONG) && (op1_def_info & MAY_BE_DOUBLE) && zend_may_overflow(opline, op_array, ssa),
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2371,7 +2372,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                if (!zend_jit_assign_dim_op(&dasm_state, opline, op_array,
                                                                OP1_INFO(), OP1_DEF_INFO(), OP2_INFO(),
                                                                OP1_DATA_INFO(), OP1_DATA_RANGE(),
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2384,7 +2385,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                }
                                                if (!zend_jit_assign_dim(&dasm_state, opline, op_array,
                                                                OP1_INFO(), OP2_INFO(), OP1_DATA_INFO(),
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2415,7 +2416,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                                OP1_DEF_INFO(), OP1_DEF_REG_ADDR(),
                                                                OP2_INFO(), op2_addr, op2_def_addr,
                                                                res_info, res_addr,
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2521,7 +2522,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                                OP1_INFO(), OP1_REG_ADDR(),
                                                                OP2_INFO(), OP2_REG_ADDR(),
                                                                res_addr,
-                                                               zend_may_throw(opline, op_array, ssa),
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa),
                                                                smart_branch_opcode, target_label, target_label2,
                                                                NULL)) {
                                                        goto jit_failure;
@@ -2549,7 +2550,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                                OP1_INFO(), OP1_REG_ADDR(),
                                                                OP2_INFO(), OP2_REG_ADDR(),
                                                                RES_REG_ADDR(),
-                                                               zend_may_throw(opline, op_array, ssa),
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa),
                                                                smart_branch_opcode, target_label, target_label2,
                                                                NULL)) {
                                                        goto jit_failure;
@@ -2649,7 +2650,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                if (!zend_jit_bool_jmpznz(&dasm_state, opline, op_array,
                                                                OP1_INFO(), OP1_REG_ADDR(), RES_REG_ADDR(),
                                                                -1, -1,
-                                                               zend_may_throw(opline, op_array, ssa),
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa),
                                                                opline->opcode, NULL)) {
                                                        goto jit_failure;
                                                }
@@ -2676,7 +2677,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                if (!zend_jit_bool_jmpznz(&dasm_state, opline, op_array,
                                                                OP1_INFO(), OP1_REG_ADDR(), res_addr,
                                                                ssa->cfg.blocks[b].successors[0], ssa->cfg.blocks[b].successors[1],
-                                                               zend_may_throw(opline, op_array, ssa),
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa),
                                                                opline->opcode, NULL)) {
                                                        goto jit_failure;
                                                }
@@ -2688,7 +2689,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                }
                                                if (!zend_jit_fetch_dim_read(&dasm_state, opline, op_array,
                                                                OP1_INFO(), OP2_INFO(), RES_INFO(),
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2717,7 +2718,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                }
                                                if (!zend_jit_isset_isempty_dim(&dasm_state, opline, op_array,
                                                                OP1_INFO(), OP2_INFO(),
-                                                               zend_may_throw(opline, op_array, ssa),
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa),
                                                                smart_branch_opcode, target_label, target_label2,
                                                                NULL)) {
                                                        goto jit_failure;
@@ -2751,7 +2752,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                                }
                                                if (!zend_jit_fetch_obj_read(&dasm_state, opline, op_array,
                                                                op1_info, ce,
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2773,14 +2774,14 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                        case ZEND_RECV_INIT:
                                                if (!zend_jit_recv_init(&dasm_state, opline, op_array,
                                                                (opline + 1)->opcode != ZEND_RECV_INIT,
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
                                        case ZEND_FREE:
                                        case ZEND_FE_FREE:
                                                if (!zend_jit_free(&dasm_state, opline, op_array, OP1_INFO(),
-                                                               zend_may_throw(opline, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2831,7 +2832,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                        if (opline == op_array->opcodes ||
                                            opline->opcode != op_array->opcodes[i-1].opcode) {
                                                /* repeatable opcodes */
-                                               if (!zend_jit_handler(&dasm_state, opline, zend_may_throw(opline, op_array, ssa))) {
+                                               if (!zend_jit_handler(&dasm_state, opline,
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                        }
@@ -2882,7 +2884,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                        is_terminated = 1;
                                        break;
                                case ZEND_JMPZNZ:
-                                       if (!zend_jit_handler(&dasm_state, opline, zend_may_throw(opline, op_array, ssa)) ||
+                                       if (!zend_jit_handler(&dasm_state, opline,
+                                                       zend_may_throw(opline, ssa_op, op_array, ssa)) ||
                                            !zend_jit_cond_jmp(&dasm_state, OP_JMP_ADDR(opline, opline->op2), ssa->cfg.blocks[b].successors[1]) ||
                                            !zend_jit_jmp(&dasm_state, ssa->cfg.blocks[b].successors[0])) {
                                                goto jit_failure;
@@ -2909,7 +2912,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                case ZEND_ASSERT_CHECK:
                                case ZEND_FE_FETCH_R:
                                case ZEND_FE_FETCH_RW:
-                                       if (!zend_jit_handler(&dasm_state, opline, zend_may_throw(opline, op_array, ssa)) ||
+                                       if (!zend_jit_handler(&dasm_state, opline,
+                                                       zend_may_throw(opline, ssa_op, op_array, ssa)) ||
                                            !zend_jit_cond_jmp(&dasm_state, opline + 1, ssa->cfg.blocks[b].successors[0])) {
                                                goto jit_failure;
                                        }
@@ -2954,7 +2958,8 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op
                                        }
                                        break;
                                default:
-                                       if (!zend_jit_handler(&dasm_state, opline, zend_may_throw(opline, op_array, ssa))) {
+                                       if (!zend_jit_handler(&dasm_state, opline,
+                                                       zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                goto jit_failure;
                                        }
                        }
index ec20e148e9a5e51a9802c81ed96ce527bb155ccd..54f8d3e5b367a63e400b227c9bdfbbc84e403b10 100644 (file)
@@ -1903,7 +1903,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                                op2_info, OP2_RANGE_EX(), OP2_REG_ADDR(),
                                                                res_use_info, res_info, res_addr,
                                                                send_result,
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -1959,7 +1959,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                                res_use_info, res_info, res_addr,
                                                                send_result,
                                                                (res_info & MAY_BE_LONG) && (res_info & (MAY_BE_DOUBLE|MAY_BE_GUARD)) && zend_may_overflow_ex(opline, ssa_op, op_array, ssa),
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                if ((res_info & (MAY_BE_ANY|MAY_BE_GUARD)) == (MAY_BE_LONG|MAY_BE_GUARD)) {
@@ -2007,7 +2007,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                res_info = RES_INFO_EX();
                                                if (!zend_jit_concat(&dasm_state, opline, op_array,
                                                                op1_info, op2_info, res_info, send_result,
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2056,7 +2056,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                                op1_info, op1_def_info, OP1_RANGE_EX(),
                                                                op2_info, OP2_RANGE_EX(),
                                                                (op1_def_info & MAY_BE_LONG) && (op1_def_info & (MAY_BE_DOUBLE|MAY_BE_GUARD)) && zend_may_overflow_ex(opline, ssa_op, op_array, ssa),
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                if ((op1_def_info & (MAY_BE_ANY|MAY_BE_GUARD)) == (MAY_BE_LONG|MAY_BE_GUARD)) {
@@ -2085,7 +2085,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                if (!zend_jit_assign_dim_op(&dasm_state, opline, op_array,
                                                                op1_info, op1_def_info, op2_info,
                                                                op1_data_info, OP1_DATA_RANGE(),
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2101,7 +2101,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                CHECK_OP1_DATA_TRACE_TYPE();
                                                if (!zend_jit_assign_dim(&dasm_state, opline, op_array,
                                                                op1_info, op2_info, op1_data_info,
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2134,7 +2134,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                                op1_def_info, OP1_DEF_REG_ADDR(),
                                                                op2_info, op2_addr, op2_def_addr,
                                                                res_info, res_addr,
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2261,7 +2261,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                                op1_info, OP1_REG_ADDR(),
                                                                op2_info, OP2_REG_ADDR(),
                                                                RES_REG_ADDR(),
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa),
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa),
                                                                smart_branch_opcode, -1, -1, exit_addr)) {
                                                        goto jit_failure;
                                                }
@@ -2293,7 +2293,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                                op1_info, OP1_REG_ADDR(),
                                                                op2_info, OP2_REG_ADDR(),
                                                                RES_REG_ADDR(),
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa),
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa),
                                                                smart_branch_opcode, -1, -1, exit_addr)) {
                                                        goto jit_failure;
                                                }
@@ -2392,7 +2392,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                if (!zend_jit_bool_jmpznz(&dasm_state, opline, op_array,
                                                                op1_info, OP1_REG_ADDR(), RES_REG_ADDR(),
                                                                -1, -1,
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa),
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa),
                                                                opline->opcode, NULL)) {
                                                        goto jit_failure;
                                                }
@@ -2456,7 +2456,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                if (!zend_jit_bool_jmpznz(&dasm_state, opline, op_array,
                                                                op1_info, OP1_REG_ADDR(), res_addr,
                                                                -1, -1,
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa),
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa),
                                                                smart_branch_opcode, exit_addr)) {
                                                        goto jit_failure;
                                                }
@@ -2509,7 +2509,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                }
                                                if (!zend_jit_isset_isempty_dim(&dasm_state, opline, op_array,
                                                                op1_info, op2_info,
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa),
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa),
                                                                smart_branch_opcode, -1, -1,
                                                                exit_addr)) {
                                                        goto jit_failure;
@@ -2542,7 +2542,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                }
                                                if (!zend_jit_fetch_obj_read(&dasm_state, opline, op_array,
                                                                op1_info, ce,
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2579,7 +2579,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                while (1) {
                                                        if (!zend_jit_recv_init(&dasm_state, opline, op_array,
                                                                        (opline + 1)->opcode != ZEND_RECV_INIT,
-                                                                       zend_may_throw_ex(opline, ssa_op, op_array, ssa))) {
+                                                                       zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                                goto jit_failure;
                                                        }
                                                        if ((opline+1)->opcode == ZEND_RECV_INIT) {
@@ -2597,7 +2597,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                op1_info = OP1_INFO_EX();
                                                USE_OP1_TRACE_TYPE();
                                                if (!zend_jit_free(&dasm_state, opline, op_array, op1_info,
-                                                               zend_may_throw_ex(opline, ssa_op, op_array, ssa))) {
+                                                               zend_may_throw(opline, ssa_op, op_array, ssa))) {
                                                        goto jit_failure;
                                                }
                                                goto done;
@@ -2622,7 +2622,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                // TODO: we may need a guard after INIT_NS_FCALL???
                                        case ZEND_INIT_METHOD_CALL:
                                        case ZEND_INIT_DYNAMIC_CALL:
-                                               if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw_ex(opline, ssa_op, op_array, ssa), p + 1)) {
+                                               if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw(opline, ssa_op, op_array, ssa), p + 1)) {
                                                        goto jit_failure;
                                                }
                                                if ((p+1)->op == ZEND_JIT_TRACE_INIT_CALL) {
@@ -2632,7 +2632,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                }
                                                goto done;
                                        case ZEND_INIT_STATIC_METHOD_CALL:
-                                               if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw_ex(opline, ssa_op, op_array, ssa), p + 1)) {
+                                               if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw(opline, ssa_op, op_array, ssa), p + 1)) {
                                                        goto jit_failure;
                                                }
                                                if ((opline->op1_type != IS_CONST
@@ -2644,7 +2644,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                }
                                                goto done;
                                        case ZEND_INIT_USER_CALL:
-                                               if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw_ex(opline, ssa_op, op_array, ssa), p + 1)) {
+                                               if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw(opline, ssa_op, op_array, ssa), p + 1)) {
                                                        goto jit_failure;
                                                }
                                                if (opline->op2_type != IS_CONST
@@ -2655,7 +2655,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                                                }
                                                goto done;
                                        case ZEND_NEW:
-                                               if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw_ex(opline, ssa_op, op_array, ssa), p + 1)) {
+                                               if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw(opline, ssa_op, op_array, ssa), p + 1)) {
                                                        goto jit_failure;
                                                }
                                                if (opline->op1_type != IS_CONST
@@ -2671,7 +2671,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
                        }
 
                        if (opline->opcode != ZEND_NOP && opline->opcode != ZEND_JMP) {
-                               if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw_ex(opline, ssa_op, op_array, ssa), p + 1)) {
+                               if (!zend_jit_trace_handler(&dasm_state, op_array, opline, zend_may_throw(opline, ssa_op, op_array, ssa), p + 1)) {
                                        goto jit_failure;
                                }
                        }
index de5138d00a28ae1e803d5a20c8eb2021ada7f877..5285a6a46d76454b50dacec830f68cc00aeca802 100644 (file)
@@ -7523,7 +7523,8 @@ static int zend_jit_needs_call_chain(zend_call_info *call_info, uint32_t b, cons
                skip = 1;
                while (opline != end) {
                        if (!skip) {
-                               if (zend_may_throw(opline, op_array, ssa)) {
+                               zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes];
+                               if (zend_may_throw(opline, ssa_op, op_array, ssa)) {
                                        return 1;
                                }
                        }
@@ -7610,7 +7611,8 @@ static int zend_jit_needs_call_chain(zend_call_info *call_info, uint32_t b, cons
                                                return 1;
                                }
                        } else {
-                               if (zend_may_throw(opline, op_array, ssa)) {
+                               zend_ssa_op *ssa_op = &ssa->ops[opline - op_array->opcodes];
+                               if (zend_may_throw(opline, ssa_op, op_array, ssa)) {
                                        return 1;
                                }
                        }
@@ -8363,14 +8365,14 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
 fallback:
        /* fallback to subroutine threading */
        if (trace) {
-               return zend_jit_trace_handler(Dst, op_array, opline, zend_may_throw(opline, op_array, ssa), trace);
+               return zend_jit_trace_handler(Dst, op_array, opline, /* may_throw */ 1, trace);
        }
        if (opline->opcode == ZEND_DO_FCALL ||
            opline->opcode == ZEND_DO_UCALL ||
            opline->opcode == ZEND_DO_FCALL_BY_NAME ){
                return zend_jit_call(Dst, opline, next_block);
        } else {
-               return zend_jit_handler(Dst, opline, zend_may_throw(opline, op_array, ssa));
+               return zend_jit_handler(Dst, opline, /* may_throw */ 1);
        }
 #endif
 }