summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_execute.c2
-rw-r--r--Zend/zend_execute_API.c2
-rw-r--r--Zend/zend_object_handlers.c2
-rw-r--r--Zend/zend_operators.c2
-rw-r--r--Zend/zend_vm_def.h6
-rw-r--r--Zend/zend_vm_execute.h40
6 files changed, 4 insertions, 50 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 4e841d5a7f..8f04518d15 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1364,7 +1364,6 @@ static zend_never_inline void zend_pre_incdec_overloaded_property(zval *object,
ZVAL_COPY_VALUE(z, value);
}
ZVAL_DEREF(z);
- SEPARATE_ZVAL_NOREF(z);
if (inc) {
increment_function(z);
} else {
@@ -1412,7 +1411,6 @@ static zend_never_inline void zend_assign_op_overloaded_property(zval *object, z
}
zptr = z;
ZVAL_DEREF(z);
- SEPARATE_ZVAL_NOREF(z);
binary_op(z, z, value);
Z_OBJ_HT(obj)->write_property(&obj, property, z, cache_slot);
if (UNEXPECTED(result)) {
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index e69a84ba6b..7792325af8 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -589,7 +589,7 @@ ZEND_API int zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */
return zend_use_undefined_constant(name, ast->attr, p);
}
zval_ptr_dtor_nogc(p);
- ZVAL_DUP(p, zv);
+ ZVAL_COPY(p, zv);
} else {
zval tmp;
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index 389e1c6b80..27177a80fc 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -650,7 +650,7 @@ zval *zend_std_read_property(zval *object, zval *member, int type, void **cache_
retval = rv;
if (!Z_ISREF_P(rv) &&
(type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET)) {
- SEPARATE_ZVAL(rv);
+ SEPARATE_ZVAL_NOREF(rv);
if (UNEXPECTED(Z_TYPE_P(rv) != IS_OBJECT)) {
zend_error(E_NOTICE, "Indirect modification of overloaded property %s::$%s has no effect", ZSTR_VAL(zobj->ce->name), Z_STRVAL_P(member));
}
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index 1449405b43..076c170f36 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -923,6 +923,8 @@ ZEND_API int ZEND_FASTCALL add_function(zval *result, zval *op1, zval *op2) /* {
}
if (result != op1) {
ZVAL_DUP(result, op1);
+ } else {
+ SEPARATE_ARRAY(result);
}
zend_hash_merge(Z_ARRVAL_P(result), Z_ARRVAL_P(op2), zval_add_ref, 0);
return SUCCESS;
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 3f1c94a942..9bed9f86bb 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -830,7 +830,6 @@ ZEND_VM_HELPER(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
binary_op(zptr, zptr, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -881,7 +880,6 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
ZEND_VM_C_GOTO(assign_dim_op_ret_null);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
}
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
@@ -956,7 +954,6 @@ ZEND_VM_HELPER(zend_binary_assign_op_simple_helper, VAR|CV, CONST|TMPVAR|CV, bin
}
} else {
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
binary_op(var_ptr, var_ptr, value);
@@ -1097,7 +1094,6 @@ ZEND_VM_HELPER(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
if (inc) {
increment_function(zptr);
@@ -1231,7 +1227,6 @@ ZEND_VM_HANDLER(34, ZEND_PRE_INC, VAR|CV, ANY, SPEC(RETVAL))
var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
increment_function(var_ptr);
@@ -1271,7 +1266,6 @@ ZEND_VM_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY, SPEC(RETVAL))
var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
decrement_function(var_ptr);
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 5d6b1424bf..e04ddeb2f1 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -15931,7 +15931,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED
var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
increment_function(var_ptr);
@@ -15971,7 +15970,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_H
var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
increment_function(var_ptr);
@@ -16011,7 +16009,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED
var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
decrement_function(var_ptr);
@@ -16051,7 +16048,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_H
var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
decrement_function(var_ptr);
@@ -17773,7 +17769,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
binary_op(zptr, zptr, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -17824,7 +17819,6 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
}
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
@@ -17898,7 +17892,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper
}
} else {
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
binary_op(var_ptr, var_ptr, value);
@@ -18198,7 +18191,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
if (inc) {
increment_function(zptr);
@@ -20863,7 +20855,6 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
}
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
@@ -22117,7 +22108,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
binary_op(zptr, zptr, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -22168,7 +22158,6 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
}
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
@@ -22242,7 +22231,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper
}
} else {
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
binary_op(var_ptr, var_ptr, value);
@@ -22542,7 +22530,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
if (inc) {
increment_function(zptr);
@@ -24738,7 +24725,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
binary_op(zptr, zptr, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -24789,7 +24775,6 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
}
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
@@ -24864,7 +24849,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper
}
} else {
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
binary_op(var_ptr, var_ptr, value);
@@ -25165,7 +25149,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
if (inc) {
increment_function(zptr);
@@ -27190,7 +27173,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
binary_op(zptr, zptr, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -27336,7 +27318,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
if (inc) {
increment_function(zptr);
@@ -29848,7 +29829,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
binary_op(zptr, zptr, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -29994,7 +29974,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
if (inc) {
increment_function(zptr);
@@ -31606,7 +31585,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
binary_op(zptr, zptr, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -31752,7 +31730,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
if (inc) {
increment_function(zptr);
@@ -33264,7 +33241,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_
var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
increment_function(var_ptr);
@@ -33303,7 +33279,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HA
var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
increment_function(var_ptr);
@@ -33342,7 +33317,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_
var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
decrement_function(var_ptr);
@@ -33381,7 +33355,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HA
var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW);
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
decrement_function(var_ptr);
@@ -35694,7 +35667,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
binary_op(zptr, zptr, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -35745,7 +35717,6 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
}
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
@@ -35819,7 +35790,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper
}
} else {
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
binary_op(var_ptr, var_ptr, value);
@@ -36119,7 +36089,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
if (inc) {
increment_function(zptr);
@@ -39942,7 +39911,6 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
}
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
@@ -42241,7 +42209,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
binary_op(zptr, zptr, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -42292,7 +42259,6 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
}
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
@@ -42366,7 +42332,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper
}
} else {
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
binary_op(var_ptr, var_ptr, value);
@@ -42666,7 +42631,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
if (inc) {
increment_function(zptr);
@@ -45954,7 +45918,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
binary_op(zptr, zptr, value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -46005,7 +45968,6 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
}
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
@@ -46080,7 +46042,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper
}
} else {
ZVAL_DEREF(var_ptr);
- SEPARATE_ZVAL_NOREF(var_ptr);
binary_op(var_ptr, var_ptr, value);
@@ -46381,7 +46342,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
}
} else {
ZVAL_DEREF(zptr);
- SEPARATE_ZVAL_NOREF(zptr);
if (inc) {
increment_function(zptr);