mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Fix duplicate undef warning in assign_dim_op
In case of auto-vivification we were fetching dim twice and as such also emitting the undef var warning twice.
This commit is contained in:
parent
f890c9c5e3
commit
11a9b036a8
3 changed files with 35 additions and 18 deletions
17
Zend/tests/assign_dim_op_undef.phpt
Normal file
17
Zend/tests/assign_dim_op_undef.phpt
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
--TEST--
|
||||||
|
Compound array assign with undefined variables
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
$a[$b] += 1;
|
||||||
|
var_dump($a);
|
||||||
|
?>
|
||||||
|
--EXPECTF--
|
||||||
|
Warning: Undefined variable $a in %s on line %d
|
||||||
|
|
||||||
|
Warning: Undefined variable $b in %s on line %d
|
||||||
|
|
||||||
|
Warning: Undefined array key "" in %s on line %d
|
||||||
|
array(1) {
|
||||||
|
[""]=>
|
||||||
|
int(1)
|
||||||
|
}
|
|
@ -1202,9 +1202,8 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
|
||||||
|
|
||||||
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
|
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||||
if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
||||||
dim++;
|
dim++;
|
||||||
}
|
}
|
||||||
|
@ -1216,6 +1215,7 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
|
||||||
ZVAL_ARR(container, zend_new_array(8));
|
ZVAL_ARR(container, zend_new_array(8));
|
||||||
ZEND_VM_C_GOTO(assign_dim_op_new_array);
|
ZEND_VM_C_GOTO(assign_dim_op_new_array);
|
||||||
} else {
|
} else {
|
||||||
|
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||||
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
||||||
ZEND_VM_C_LABEL(assign_dim_op_ret_null):
|
ZEND_VM_C_LABEL(assign_dim_op_ret_null):
|
||||||
FREE_OP_DATA();
|
FREE_OP_DATA();
|
||||||
|
|
|
@ -22270,9 +22270,8 @@ assign_dim_op_new_array:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dim = RT_CONSTANT(opline, opline->op2);
|
|
||||||
|
|
||||||
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
|
dim = RT_CONSTANT(opline, opline->op2);
|
||||||
if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
||||||
dim++;
|
dim++;
|
||||||
}
|
}
|
||||||
|
@ -22284,6 +22283,7 @@ assign_dim_op_new_array:
|
||||||
ZVAL_ARR(container, zend_new_array(8));
|
ZVAL_ARR(container, zend_new_array(8));
|
||||||
goto assign_dim_op_new_array;
|
goto assign_dim_op_new_array;
|
||||||
} else {
|
} else {
|
||||||
|
dim = RT_CONSTANT(opline, opline->op2);
|
||||||
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
||||||
assign_dim_op_ret_null:
|
assign_dim_op_ret_null:
|
||||||
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
@ -24777,9 +24777,8 @@ assign_dim_op_new_array:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
|
|
||||||
|
|
||||||
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
|
dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
|
||||||
if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
||||||
dim++;
|
dim++;
|
||||||
}
|
}
|
||||||
|
@ -24791,6 +24790,7 @@ assign_dim_op_new_array:
|
||||||
ZVAL_ARR(container, zend_new_array(8));
|
ZVAL_ARR(container, zend_new_array(8));
|
||||||
goto assign_dim_op_new_array;
|
goto assign_dim_op_new_array;
|
||||||
} else {
|
} else {
|
||||||
|
dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
|
||||||
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
||||||
assign_dim_op_ret_null:
|
assign_dim_op_ret_null:
|
||||||
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
@ -26958,9 +26958,8 @@ assign_dim_op_new_array:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dim = NULL;
|
|
||||||
|
|
||||||
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
|
dim = NULL;
|
||||||
if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
||||||
dim++;
|
dim++;
|
||||||
}
|
}
|
||||||
|
@ -26972,6 +26971,7 @@ assign_dim_op_new_array:
|
||||||
ZVAL_ARR(container, zend_new_array(8));
|
ZVAL_ARR(container, zend_new_array(8));
|
||||||
goto assign_dim_op_new_array;
|
goto assign_dim_op_new_array;
|
||||||
} else {
|
} else {
|
||||||
|
dim = NULL;
|
||||||
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
||||||
assign_dim_op_ret_null:
|
assign_dim_op_ret_null:
|
||||||
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
@ -28677,9 +28677,8 @@ assign_dim_op_new_array:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
|
|
||||||
|
|
||||||
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
|
dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
|
||||||
if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
||||||
dim++;
|
dim++;
|
||||||
}
|
}
|
||||||
|
@ -28691,6 +28690,7 @@ assign_dim_op_new_array:
|
||||||
ZVAL_ARR(container, zend_new_array(8));
|
ZVAL_ARR(container, zend_new_array(8));
|
||||||
goto assign_dim_op_new_array;
|
goto assign_dim_op_new_array;
|
||||||
} else {
|
} else {
|
||||||
|
dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
|
||||||
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
||||||
assign_dim_op_ret_null:
|
assign_dim_op_ret_null:
|
||||||
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
@ -39265,9 +39265,8 @@ assign_dim_op_new_array:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dim = RT_CONSTANT(opline, opline->op2);
|
|
||||||
|
|
||||||
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
|
dim = RT_CONSTANT(opline, opline->op2);
|
||||||
if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
||||||
dim++;
|
dim++;
|
||||||
}
|
}
|
||||||
|
@ -39279,6 +39278,7 @@ assign_dim_op_new_array:
|
||||||
ZVAL_ARR(container, zend_new_array(8));
|
ZVAL_ARR(container, zend_new_array(8));
|
||||||
goto assign_dim_op_new_array;
|
goto assign_dim_op_new_array;
|
||||||
} else {
|
} else {
|
||||||
|
dim = RT_CONSTANT(opline, opline->op2);
|
||||||
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
||||||
assign_dim_op_ret_null:
|
assign_dim_op_ret_null:
|
||||||
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
@ -42852,9 +42852,8 @@ assign_dim_op_new_array:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
|
|
||||||
|
|
||||||
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
|
dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
|
||||||
if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
||||||
dim++;
|
dim++;
|
||||||
}
|
}
|
||||||
|
@ -42866,6 +42865,7 @@ assign_dim_op_new_array:
|
||||||
ZVAL_ARR(container, zend_new_array(8));
|
ZVAL_ARR(container, zend_new_array(8));
|
||||||
goto assign_dim_op_new_array;
|
goto assign_dim_op_new_array;
|
||||||
} else {
|
} else {
|
||||||
|
dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
|
||||||
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
||||||
assign_dim_op_ret_null:
|
assign_dim_op_ret_null:
|
||||||
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
@ -45610,9 +45610,8 @@ assign_dim_op_new_array:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dim = NULL;
|
|
||||||
|
|
||||||
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
|
dim = NULL;
|
||||||
if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
||||||
dim++;
|
dim++;
|
||||||
}
|
}
|
||||||
|
@ -45624,6 +45623,7 @@ assign_dim_op_new_array:
|
||||||
ZVAL_ARR(container, zend_new_array(8));
|
ZVAL_ARR(container, zend_new_array(8));
|
||||||
goto assign_dim_op_new_array;
|
goto assign_dim_op_new_array;
|
||||||
} else {
|
} else {
|
||||||
|
dim = NULL;
|
||||||
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
||||||
assign_dim_op_ret_null:
|
assign_dim_op_ret_null:
|
||||||
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
@ -47863,9 +47863,8 @@ assign_dim_op_new_array:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
|
|
||||||
|
|
||||||
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
|
||||||
|
dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
|
||||||
if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
|
||||||
dim++;
|
dim++;
|
||||||
}
|
}
|
||||||
|
@ -47877,6 +47876,7 @@ assign_dim_op_new_array:
|
||||||
ZVAL_ARR(container, zend_new_array(8));
|
ZVAL_ARR(container, zend_new_array(8));
|
||||||
goto assign_dim_op_new_array;
|
goto assign_dim_op_new_array;
|
||||||
} else {
|
} else {
|
||||||
|
dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
|
||||||
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
|
||||||
assign_dim_op_ret_null:
|
assign_dim_op_ret_null:
|
||||||
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue