@@ -5416,6 +5416,9 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5416
5416
if (opline -> op1_type == IS_CV
5417
5417
&& ssa -> vars [ssa_op -> op1_use ].alias == NO_ALIAS ) {
5418
5418
ssa -> var_info [ssa_op -> op1_use ].guarded_reference = 1 ;
5419
+ if (ssa_op -> op1_def >= 0 ) {
5420
+ ssa -> var_info [ssa_op -> op1_def ].guarded_reference = 1 ;
5421
+ }
5419
5422
}
5420
5423
} else {
5421
5424
CHECK_OP1_TRACE_TYPE ();
@@ -5436,15 +5439,24 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
5436
5439
op1_info |= MAY_BE_PACKED_GUARD ;
5437
5440
if (orig_op1_type & IS_TRACE_PACKED ) {
5438
5441
op1_info &= ~(MAY_BE_ARRAY_NUMERIC_HASH |MAY_BE_ARRAY_STRING_HASH );
5442
+ if (op1_type != IS_UNKNOWN ) {
5443
+ ssa -> var_info [ssa_op -> op1_use ].type &= ~(MAY_BE_ARRAY_NUMERIC_HASH |MAY_BE_ARRAY_STRING_HASH );
5444
+ }
5439
5445
} else {
5440
5446
op1_info &= ~MAY_BE_ARRAY_PACKED ;
5447
+ if (op1_type != IS_UNKNOWN ) {
5448
+ ssa -> var_info [ssa_op -> op1_use ].type &= ~MAY_BE_ARRAY_PACKED ;
5449
+ }
5441
5450
}
5442
5451
}
5443
5452
if (!zend_jit_fetch_dim_read (& dasm_state , opline , ssa , ssa_op ,
5444
5453
op1_info , op1_addr , avoid_refcounting ,
5445
5454
op2_info , res_info , RES_REG_ADDR (), val_type )) {
5446
5455
goto jit_failure ;
5447
5456
}
5457
+ if (ssa_op -> op1_def >= 0 && op1_type != IS_UNKNOWN ) {
5458
+ ssa -> var_info [ssa_op -> op1_def ].type = ssa -> var_info [ssa_op -> op1_use ].type ;
5459
+ }
5448
5460
goto done ;
5449
5461
case ZEND_FETCH_DIM_W :
5450
5462
case ZEND_FETCH_DIM_RW :
0 commit comments