@@ -4721,7 +4721,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4721
4721
if (op1_ffi_type
4722
4722
&& (op1_ffi_type -> kind == ZEND_FFI_TYPE_ARRAY || op1_ffi_type -> kind == ZEND_FFI_TYPE_POINTER )
4723
4723
&& op2_info == MAY_BE_LONG
4724
- && zend_jit_ffi_compatible (op1_ffi_type -> array .type , op1_data_info , op3_ffi_type )) {
4724
+ && (zend_jit_ffi_compatible (op1_ffi_type -> array .type , op1_data_info , op3_ffi_type )
4725
+ || zend_jit_ffi_compatible_addr_op (op1_ffi_type -> array .type , op1_data_info , op3_ffi_type , opline -> extended_value ))) {
4725
4726
if (!ffi_info ) {
4726
4727
ffi_info = zend_arena_calloc (& CG (arena ), ssa -> vars_count , sizeof (zend_jit_ffi_info ));
4727
4728
}
@@ -4926,7 +4927,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4926
4927
if (field
4927
4928
&& !field -> is_const
4928
4929
&& !field -> bits
4929
- && zend_jit_ffi_compatible (field -> type , op1_data_info , op3_ffi_type )) {
4930
+ && (zend_jit_ffi_compatible (field -> type , op1_data_info , op3_ffi_type )
4931
+ || zend_jit_ffi_compatible_addr_op (field -> type , op1_data_info , op3_ffi_type , opline -> extended_value ))) {
4930
4932
if (!ffi_info ) {
4931
4933
ffi_info = zend_arena_calloc (& CG (arena ), ssa -> vars_count , sizeof (zend_jit_ffi_info ));
4932
4934
}
@@ -4943,7 +4945,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
4943
4945
Z_STR_P (RT_CONSTANT (opline , opline -> op2 )));
4944
4946
if (sym
4945
4947
&& sym -> kind == ZEND_FFI_SYM_VAR
4946
- && zend_jit_ffi_compatible (sym -> type , op1_data_info , op3_ffi_type )) {
4948
+ && (zend_jit_ffi_compatible (sym -> type , op1_data_info , op3_ffi_type )
4949
+ || zend_jit_ffi_compatible_addr_op (sym -> type , op1_data_info , op3_ffi_type , opline -> extended_value ))) {
4947
4950
if (!ffi_info ) {
4948
4951
ffi_info = zend_arena_calloc (& CG (arena ), ssa -> vars_count , sizeof (zend_jit_ffi_info ));
4949
4952
}
0 commit comments