@@ -6833,14 +6833,18 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
68336833 if (ra && (p - 1 )-> op != ZEND_JIT_TRACE_ENTER ) {
68346834 for (i = 0 ; i < op_array -> last_var + op_array -> T ; i ++ ) {
68356835 int32_t ref = STACK_REF (stack , i );
6836+ uint8_t type = STACK_TYPE (stack , i );
68366837
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 )) {
68426840 goto jit_failure ;
68436841 }
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 );
68446848 }
68456849 CLEAR_STACK_REF (stack , i );
68466850 }
0 commit comments