]> granicus.if.org Git - php/commitdiff
Merge common code
authorDmitry Stogov <dmitry@zend.com>
Thu, 18 Jul 2019 13:46:25 +0000 (16:46 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 18 Jul 2019 13:46:25 +0000 (16:46 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index c7bb1aec57f6cde222d3123056f88ed529063a1a..8594cda17950fe1601c79738077e0d96292468a8 100644 (file)
@@ -2457,8 +2457,8 @@ ZEND_VM_HANDLER(24, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       FREE_OP_DATA();
-                       ZEND_VM_C_GOTO(exit_assign_obj);
+                       value = &EG(uninitialized_zval);
+                       ZEND_VM_C_GOTO(free_and_exit_assign_obj);
                }
        }
 
@@ -2488,15 +2488,12 @@ ZEND_VM_C_LABEL(assign_object):
                                        if (OP_DATA_TYPE == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       FREE_OP_DATA();
+                                       ZEND_VM_C_GOTO(free_and_exit_assign_obj);
                                } else {
 ZEND_VM_C_LABEL(fast_assign_obj):
                                        value = zend_assign_to_variable(property_val, value, OP_DATA_TYPE, EX_USES_STRICT_TYPES());
+                                       ZEND_VM_C_GOTO(exit_assign_obj);
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               ZEND_VM_C_GOTO(exit_assign_obj);
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -2542,9 +2539,6 @@ ZEND_VM_C_LABEL(fast_assign_obj):
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                ZEND_VM_C_GOTO(exit_assign_obj);
                        }
                }
@@ -2554,13 +2548,14 @@ ZEND_VM_C_LABEL(fast_assign_obj):
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+ZEND_VM_C_LABEL(free_and_exit_assign_obj):
        FREE_OP_DATA();
 ZEND_VM_C_LABEL(exit_assign_obj):
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        FREE_OP2();
        FREE_OP1_VAR_PTR();
        /* assign_obj has two opcodes! */
index b01ff1c7a7d98512ef05509b4c25e33cede929b5..763cc1b1acd04e4cc114c13e1dd2a24e14023203 100644 (file)
@@ -22324,8 +22324,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -22355,15 +22355,12 @@ assign_object:
                                        if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -22409,9 +22406,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -22421,13 +22415,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -22458,8 +22453,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -22489,15 +22484,12 @@ assign_object:
                                        if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -22543,9 +22535,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -22555,13 +22544,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -22592,8 +22582,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -22623,15 +22613,12 @@ assign_object:
                                        if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -22677,9 +22664,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -22689,13 +22673,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -22726,8 +22711,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -22757,15 +22742,12 @@ assign_object:
                                        if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -22811,9 +22793,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -22823,13 +22802,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -24610,8 +24590,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -24641,15 +24621,12 @@ assign_object:
                                        if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -24695,9 +24672,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -24707,13 +24681,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -24744,8 +24719,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -24775,15 +24750,12 @@ assign_object:
                                        if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -24829,9 +24801,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -24841,13 +24810,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -24878,8 +24848,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -24909,15 +24879,12 @@ assign_object:
                                        if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -24963,9 +24930,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -24975,13 +24939,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -25012,8 +24977,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -25043,15 +25008,12 @@ assign_object:
                                        if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -25097,9 +25059,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -25109,13 +25068,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -28352,8 +28312,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -28383,15 +28343,12 @@ assign_object:
                                        if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -28437,9 +28394,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -28449,13 +28403,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -28486,8 +28441,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -28517,15 +28472,12 @@ assign_object:
                                        if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -28571,9 +28523,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -28583,13 +28532,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -28620,8 +28570,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -28651,15 +28601,12 @@ assign_object:
                                        if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -28705,9 +28652,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -28717,13 +28661,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -28754,8 +28699,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -28785,15 +28730,12 @@ assign_object:
                                        if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -28839,9 +28781,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -28851,13 +28790,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
        /* assign_obj has two opcodes! */
@@ -30827,8 +30767,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -30858,15 +30798,12 @@ assign_object:
                                        if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -30912,9 +30849,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -30924,13 +30858,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -30961,8 +30896,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -30992,15 +30927,12 @@ assign_object:
                                        if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -31046,9 +30978,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -31058,13 +30987,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -31095,8 +31025,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -31126,15 +31056,12 @@ assign_object:
                                        if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -31180,9 +31107,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -31192,13 +31116,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -31229,8 +31154,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -31260,15 +31185,12 @@ assign_object:
                                        if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -31314,9 +31236,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -31326,13 +31245,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -32652,8 +32572,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -32683,15 +32603,12 @@ assign_object:
                                        if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -32737,9 +32654,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -32749,13 +32663,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
 
        /* assign_obj has two opcodes! */
@@ -32786,8 +32701,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -32817,15 +32732,12 @@ assign_object:
                                        if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -32871,9 +32783,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -32883,13 +32792,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
 
        /* assign_obj has two opcodes! */
@@ -32920,8 +32830,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -32951,15 +32861,12 @@ assign_object:
                                        if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -33005,9 +32912,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -33017,13 +32921,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
 
        /* assign_obj has two opcodes! */
@@ -33054,8 +32959,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -33085,15 +32990,12 @@ assign_object:
                                        if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -33139,9 +33041,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -33151,13 +33050,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
 
        /* assign_obj has two opcodes! */
@@ -35153,8 +35053,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -35184,15 +35084,12 @@ assign_object:
                                        if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -35238,9 +35135,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -35250,13 +35144,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -35287,8 +35182,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -35318,15 +35213,12 @@ assign_object:
                                        if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -35372,9 +35264,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -35384,13 +35273,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -35421,8 +35311,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -35452,15 +35342,12 @@ assign_object:
                                        if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -35506,9 +35393,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -35518,13 +35402,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -35555,8 +35440,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -35586,15 +35471,12 @@ assign_object:
                                        if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -35640,9 +35522,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -35652,13 +35531,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -39491,8 +39371,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -39522,15 +39402,12 @@ assign_object:
                                        if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -39576,9 +39453,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -39588,13 +39462,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -39625,8 +39500,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -39656,15 +39531,12 @@ assign_object:
                                        if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -39710,9 +39582,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -39722,13 +39591,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -39759,8 +39629,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -39790,15 +39660,12 @@ assign_object:
                                        if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -39844,9 +39711,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -39856,13 +39720,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -39893,8 +39758,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -39924,15 +39789,12 @@ assign_object:
                                        if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -39978,9 +39840,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -39990,13 +39849,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -42980,8 +42840,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -43011,15 +42871,12 @@ assign_object:
                                        if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -43065,9 +42922,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -43077,13 +42931,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
 
        /* assign_obj has two opcodes! */
@@ -43114,8 +42969,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -43145,15 +43000,12 @@ assign_object:
                                        if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -43199,9 +43051,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -43211,13 +43060,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
 
        /* assign_obj has two opcodes! */
@@ -43248,8 +43098,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -43279,15 +43129,12 @@ assign_object:
                                        if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -43333,9 +43180,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -43345,13 +43189,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
 
        /* assign_obj has two opcodes! */
@@ -43382,8 +43227,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -43413,15 +43258,12 @@ assign_object:
                                        if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -43467,9 +43309,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -43479,13 +43318,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
        zval_ptr_dtor_nogc(free_op2);
 
        /* assign_obj has two opcodes! */
@@ -48030,8 +47870,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -48061,15 +47901,12 @@ assign_object:
                                        if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -48115,9 +47952,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -48127,13 +47961,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -48164,8 +47999,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -48195,15 +48030,12 @@ assign_object:
                                        if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -48249,9 +48081,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -48261,13 +48090,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -48298,8 +48128,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-                       zval_ptr_dtor_nogc(free_op_data);
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -48329,15 +48159,12 @@ assign_object:
                                        if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-                                       zval_ptr_dtor_nogc(free_op_data);
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -48383,9 +48210,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -48395,13 +48219,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
        zval_ptr_dtor_nogc(free_op_data);
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */
@@ -48432,8 +48257,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
                }
                object = make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC);
                if (UNEXPECTED(!object)) {
-
-                       goto exit_assign_obj;
+                       value = &EG(uninitialized_zval);
+                       goto free_and_exit_assign_obj;
                }
        }
 
@@ -48463,15 +48288,12 @@ assign_object:
                                        if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
                                                CACHE_PTR_EX(cache_slot + 2, NULL);
                                        }
-
+                                       goto free_and_exit_assign_obj;
                                } else {
 fast_assign_obj:
                                        value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+                                       goto exit_assign_obj;
                                }
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
-                               goto exit_assign_obj;
                        }
                } else {
                        if (EXPECTED(zobj->properties != NULL)) {
@@ -48517,9 +48339,6 @@ fast_assign_obj:
                                        }
                                }
                                zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_COPY(EX_VAR(opline->result.var), value);
-                               }
                                goto exit_assign_obj;
                        }
                }
@@ -48529,13 +48348,14 @@ fast_assign_obj:
                ZVAL_DEREF(value);
        }
 
-       property = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+       value = Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
 
-       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-               ZVAL_COPY(EX_VAR(opline->result.var), property);
-       }
+free_and_exit_assign_obj:
 
 exit_assign_obj:
+       if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+               ZVAL_COPY(EX_VAR(opline->result.var), value);
+       }
 
 
        /* assign_obj has two opcodes! */