@@ -3156,7 +3156,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3156
3156
op1_addr = OP1_REG_ADDR ();
3157
3157
if (orig_op1_type != IS_UNKNOWN
3158
3158
&& (orig_op1_type & IS_TRACE_REFERENCE )) {
3159
- if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op1_type , & op1_info , & op1_addr )) {
3159
+ if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op1_type , & op1_info , & op1_addr , 1 )) {
3160
3160
goto jit_failure ;
3161
3161
}
3162
3162
} else {
@@ -3182,7 +3182,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3182
3182
op1_addr = OP1_REG_ADDR ();
3183
3183
if (orig_op1_type != IS_UNKNOWN
3184
3184
&& (orig_op1_type & IS_TRACE_REFERENCE )) {
3185
- if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op1_type , & op1_info , & op1_addr )) {
3185
+ if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op1_type , & op1_info , & op1_addr , 1 )) {
3186
3186
goto jit_failure ;
3187
3187
}
3188
3188
} else {
@@ -3221,10 +3221,28 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3221
3221
CHECK_OP2_TRACE_TYPE ();
3222
3222
op1_info = OP1_INFO ();
3223
3223
op1_def_info = OP1_DEF_INFO ();
3224
- USE_OP1_TRACE_TYPE ();
3224
+ op1_addr = OP1_REG_ADDR ();
3225
+ op1_def_addr = OP1_DEF_REG_ADDR ();
3226
+ if (orig_op1_type != IS_UNKNOWN
3227
+ && (orig_op1_type & IS_TRACE_REFERENCE )) {
3228
+ if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op1_type , & op1_info , & op1_addr , 0 )) {
3229
+ goto jit_failure ;
3230
+ }
3231
+ op1_def_addr = op1_addr ;
3232
+ } else {
3233
+ USE_OP1_TRACE_TYPE ();
3234
+ if (orig_op1_type != IS_UNKNOWN
3235
+ && (op1_info & MAY_BE_REF )) {
3236
+ if (!zend_jit_noref_guard (& dasm_state , opline , op1_addr )) {
3237
+ goto jit_failure ;
3238
+ }
3239
+ op1_info &= ~MAY_BE_REF ;
3240
+ op1_def_info &= ~MAY_BE_REF ;
3241
+ }
3242
+ }
3225
3243
if (!zend_jit_assign (& dasm_state , opline , op_array ,
3226
- op1_info , OP1_REG_ADDR () ,
3227
- op1_def_info , OP1_DEF_REG_ADDR () ,
3244
+ op1_info , op1_addr ,
3245
+ op1_def_info , op1_def_addr ,
3228
3246
op2_info , op2_addr , op2_def_addr ,
3229
3247
res_info , res_addr ,
3230
3248
zend_may_throw (opline , ssa_op , op_array , ssa ))) {
@@ -3616,7 +3634,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3616
3634
op1_addr = OP1_REG_ADDR ();
3617
3635
if (orig_op1_type != IS_UNKNOWN
3618
3636
&& (orig_op1_type & IS_TRACE_REFERENCE )) {
3619
- if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op1_type , & op1_info , & op1_addr )) {
3637
+ if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op1_type , & op1_info , & op1_addr , 1 )) {
3620
3638
goto jit_failure ;
3621
3639
}
3622
3640
} else {
@@ -3649,7 +3667,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
3649
3667
op1_addr = OP1_REG_ADDR ();
3650
3668
if (orig_op1_type != IS_UNKNOWN
3651
3669
&& (orig_op1_type & IS_TRACE_REFERENCE )) {
3652
- if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op1_type , & op1_info , & op1_addr )) {
3670
+ if (!zend_jit_fetch_reference (& dasm_state , opline , orig_op1_type , & op1_info , & op1_addr , 1 )) {
3653
3671
goto jit_failure ;
3654
3672
}
3655
3673
} else {
0 commit comments