@@ -6833,14 +6833,18 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
6833
6833
if (ra && (p - 1 )-> op != ZEND_JIT_TRACE_ENTER ) {
6834
6834
for (i = 0 ; i < op_array -> last_var + op_array -> T ; i ++ ) {
6835
6835
int32_t ref = STACK_REF (stack , i );
6836
+ uint8_t type = STACK_TYPE (stack , i );
6836
6837
6837
- if (ref ) {
6838
- uint8_t type = STACK_TYPE (stack , i );
6839
-
6840
- if (!(STACK_FLAGS (stack , i ) & (ZREG_LOAD |ZREG_STORE ))
6841
- && !zend_jit_store_ref (jit , 1 << type , i , ref , STACK_MEM_TYPE (stack , i ) != type )) {
6838
+ if (ref && (!(STACK_FLAGS (stack , i ) & (ZREG_LOAD |ZREG_STORE )))) {
6839
+ if (!zend_jit_store_ref (jit , 1 << type , i , ref , STACK_MEM_TYPE (stack , i ) != type )) {
6842
6840
goto jit_failure ;
6843
6841
}
6842
+ SET_STACK_TYPE (stack , i , type , 1 );
6843
+ } else if (type != IS_UNKNOWN && type != STACK_MEM_TYPE (stack , i )) {
6844
+ if (!zend_jit_store_type (jit , i , type )) {
6845
+ return 0 ;
6846
+ }
6847
+ SET_STACK_TYPE (stack , i , type , 1 );
6844
6848
}
6845
6849
CLEAR_STACK_REF (stack , i );
6846
6850
}
0 commit comments