@@ -4020,8 +4020,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4020
4020
op2_info = OP2_INFO ();
4021
4021
CHECK_OP2_TRACE_TYPE ();
4022
4022
res_info = RES_INFO ();
4023
+ avoid_refcounting =
4024
+ ssa_op -> op1_use >= 0 &&
4025
+ ssa -> var_info [ssa_op -> op1_use ].avoid_refcounting ;
4023
4026
if (!zend_jit_fetch_dim_read (& dasm_state , opline , ssa , ssa_op ,
4024
- op1_info , op1_addr , ssa -> var_info [ ssa_op -> op1_use ]. avoid_refcounting ,
4027
+ op1_info , op1_addr , avoid_refcounting ,
4025
4028
op2_info , res_info , RES_REG_ADDR (),
4026
4029
(
4027
4030
(op1_info & MAY_BE_ANY ) != MAY_BE_ARRAY ||
@@ -4063,7 +4066,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4063
4066
if (ra ) {
4064
4067
zend_jit_trace_clenup_stack (stack , opline , ssa_op , ssa , ra );
4065
4068
}
4066
- if (ssa -> var_info [ssa_op -> op1_use ].avoid_refcounting ) {
4069
+ if (ssa_op -> op1_use >= 0
4070
+ && ssa -> var_info [ssa_op -> op1_use ].avoid_refcounting ) {
4067
4071
/* Temporary reset ZREG_ZVAL_TRY_ADDREF */
4068
4072
zend_jit_trace_stack * stack = JIT_G (current_frame )-> stack ;
4069
4073
uint32_t old_info = STACK_INFO (stack , EX_VAR_TO_NUM (opline -> op1 .var ));
@@ -4083,8 +4087,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4083
4087
smart_branch_opcode = 0 ;
4084
4088
exit_addr = NULL ;
4085
4089
}
4090
+ avoid_refcounting =
4091
+ ssa_op -> op1_use >= 0 &&
4092
+ ssa -> var_info [ssa_op -> op1_use ].avoid_refcounting ;
4086
4093
if (!zend_jit_isset_isempty_dim (& dasm_state , opline ,
4087
- op1_info , op1_addr , ssa -> var_info [ ssa_op -> op1_use ]. avoid_refcounting ,
4094
+ op1_info , op1_addr , avoid_refcounting ,
4088
4095
op2_info ,
4089
4096
zend_may_throw_ex (opline , ssa_op , op_array , ssa , op1_info , op2_info ),
4090
4097
smart_branch_opcode , -1 , -1 ,
0 commit comments