@@ -4564,6 +4564,9 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, const ze
4564
4564
if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_ARRAY)) {
4565
4565
|6:
4566
4566
if (opline->op2_type == IS_UNUSED) {
4567
+ uint32_t var_info = MAY_BE_NULL;
4568
+ zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, 0);
4569
+
4567
4570
| // var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
4568
4571
| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval
4569
4572
| EXT_CALL zend_hash_next_index_insert, r0
@@ -4578,29 +4581,21 @@ static int zend_jit_assign_dim(dasm_State **Dst, const zend_op *opline, const ze
4578
4581
| jmp >9
4579
4582
|.code
4580
4583
| mov FCARG1a, r0
4581
- } else {
4582
- if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_W, op1_info, op2_info, 8, 8)) {
4583
- return 0;
4584
- }
4585
4584
4586
- |8:
4587
- | mov FCARG1a, r0
4588
- }
4589
-
4590
- if (opline->op2_type == IS_UNUSED) {
4591
- uint32_t var_info = zend_array_element_type(op1_info, 0, 0);
4592
- zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, 0);
4593
-
4594
- if (op1_info & (MAY_BE_ARRAY_OF_REF|MAY_BE_OBJECT)) {
4595
- var_info |= MAY_BE_REF;
4596
- }
4597
4585
if (!zend_jit_simple_assign(Dst, opline, op_array, var_addr, var_info, -1, (opline+1)->op1_type, (opline+1)->op1, op3_addr, val_info, res_addr, 0)) {
4598
4586
return 0;
4599
4587
}
4600
4588
} else {
4601
4589
uint32_t var_info = zend_array_element_type(op1_info, 0, 0);
4602
4590
zend_jit_addr var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, 0);
4603
4591
4592
+ if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_W, op1_info, op2_info, 8, 8)) {
4593
+ return 0;
4594
+ }
4595
+
4596
+ |8:
4597
+ | mov FCARG1a, r0
4598
+
4604
4599
if (op1_info & (MAY_BE_ARRAY_OF_REF|MAY_BE_OBJECT)) {
4605
4600
var_info |= MAY_BE_REF;
4606
4601
}
@@ -4789,14 +4784,13 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, const
4789
4784
}
4790
4785
4791
4786
if (op1_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_ARRAY)) {
4792
- uint32_t var_info = zend_array_element_type(op1_info, 0, 0) ;
4787
+ uint32_t var_info;
4793
4788
uint32_t var_def_info = zend_array_element_type(op1_def_info, 1, 0);
4794
4789
4795
- if (op1_info & (MAY_BE_ARRAY_OF_REF|MAY_BE_OBJECT)) {
4796
- var_info |= MAY_BE_REF;
4797
- }
4798
4790
|6:
4799
4791
if (opline->op2_type == IS_UNUSED) {
4792
+ var_info = MAY_BE_NULL;
4793
+
4800
4794
| // var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval));
4801
4795
| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval
4802
4796
| EXT_CALL zend_hash_next_index_insert, r0
@@ -4812,6 +4806,11 @@ static int zend_jit_assign_dim_op(dasm_State **Dst, const zend_op *opline, const
4812
4806
|.code
4813
4807
| mov FCARG1a, r0
4814
4808
} else {
4809
+ var_info = zend_array_element_type(op1_info, 0, 0);
4810
+ if (op1_info & (MAY_BE_ARRAY_OF_REF|MAY_BE_OBJECT)) {
4811
+ var_info |= MAY_BE_REF;
4812
+ }
4813
+
4815
4814
if (!zend_jit_fetch_dimension_address_inner(Dst, opline, BP_VAR_RW, op1_info, op2_info, 8, 8)) {
4816
4815
return 0;
4817
4816
}
0 commit comments