]> granicus.if.org Git - php/commitdiff
Delay IS_ERROR checks
authorDmitry Stogov <dmitry@zend.com>
Thu, 9 Jun 2016 09:39:38 +0000 (12:39 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 9 Jun 2016 09:39:38 +0000 (12:39 +0300)
Zend/zend_execute.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 683f674d96f9e98f3bf1b638539627adab3dff44..b2769ad6fbb9ab7903e5fcbd15dace58af7b40c3 100644 (file)
@@ -1950,11 +1950,6 @@ static zend_always_inline void zend_fetch_property_address(zval *result, zval *c
 {
     if (container_op_type != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
                do {
-                       if (container_op_type == IS_VAR && UNEXPECTED(Z_ISERROR_P(container))) {
-                               ZVAL_ERROR(result);
-                               return;
-                       }
-
                        if (Z_ISREF_P(container)) {
                                container = Z_REFVAL_P(container);
                                if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
@@ -1969,7 +1964,9 @@ static zend_always_inline void zend_fetch_property_address(zval *result, zval *c
                                zval_ptr_dtor_nogc(container);
                                object_init(container);
                        } else {
-                               zend_error(E_WARNING, "Attempt to modify property of non-object");
+                               if (container_op_type != IS_VAR || EXPECTED(!Z_ISERROR_P(container))) {
+                                       zend_error(E_WARNING, "Attempt to modify property of non-object");
+                               }
                                ZVAL_ERROR(result);
                                return;
                        }
@@ -2005,6 +2002,7 @@ static zend_always_inline void zend_fetch_property_address(zval *result, zval *c
                zval *ptr = Z_OBJ_HT_P(container)->get_property_ptr_ptr(container, prop_ptr, type, cache_slot);
                if (NULL == ptr) {
                        if (EXPECTED(Z_OBJ_HT_P(container)->read_property)) {
+use_read_property:
                                ptr = Z_OBJ_HT_P(container)->read_property(container, prop_ptr, type, cache_slot, result);
                                if (ptr != result) {
                                        ZVAL_INDIRECT(result, ptr);
@@ -2019,12 +2017,7 @@ static zend_always_inline void zend_fetch_property_address(zval *result, zval *c
                        ZVAL_INDIRECT(result, ptr);
                }
        } else if (EXPECTED(Z_OBJ_HT_P(container)->read_property)) {
-               zval *ptr = Z_OBJ_HT_P(container)->read_property(container, prop_ptr, type, cache_slot, result);
-               if (ptr != result) {
-                       ZVAL_INDIRECT(result, ptr);
-               } else if (UNEXPECTED(Z_ISREF_P(ptr) && Z_REFCOUNT_P(ptr) == 1)) {
-                       ZVAL_UNREF(ptr);
-               }
+               goto use_read_property; 
        } else {
                zend_error(E_WARNING, "This object doesn't support property references");
                ZVAL_ERROR(result);
index 2a29ff744f356ce713db59fcd06a814d2f1511fa..331ebdb85d68557a73e12bcd17f169ddde8fe3c6 100644 (file)
@@ -839,11 +839,10 @@ ZEND_VM_C_LABEL(assign_dim_op_convert_to_array):
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               ZEND_VM_C_GOTO(assign_dim_op_convert_to_array);
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       ZEND_VM_C_GOTO(assign_dim_op_convert_to_array);
-                               }
-                               if (UNEXPECTED(OP1_TYPE != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(OP1_TYPE != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 ZEND_VM_C_LABEL(assign_dim_op_ret_null):
@@ -2159,13 +2158,6 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, SPEC(
 
        if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               FREE_OP_DATA();
-                               ZEND_VM_C_GOTO(exit_assign_obj);
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -2192,7 +2184,9 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, SPEC(
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (OP1_TYPE != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -2373,7 +2367,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        ZEND_VM_C_GOTO(try_assign_dim_array);
                } else {
-                       if (OP1_TYPE != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (OP1_TYPE != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
index 25769073affb319f35fe983444303a1291fe553d..ca5b343cf5456d007cfe41955cbfe49e444d19bf 100644 (file)
@@ -17170,11 +17170,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_VAR != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -18389,13 +18388,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -18422,7 +18414,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -18550,13 +18544,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -18583,7 +18570,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -18711,13 +18700,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -18744,7 +18726,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -18872,13 +18856,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -18905,7 +18882,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -19085,7 +19064,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = EX_CONSTANT(opline->op2);
@@ -19177,7 +19156,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = EX_CONSTANT(opline->op2);
@@ -19269,7 +19248,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = EX_CONSTANT(opline->op2);
@@ -19360,7 +19339,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = EX_CONSTANT(opline->op2);
@@ -20655,11 +20634,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_VAR != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -21061,7 +21039,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = NULL;
@@ -21153,7 +21131,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = NULL;
@@ -21245,7 +21223,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = NULL;
@@ -21336,7 +21314,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = NULL;
@@ -22018,11 +21996,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_VAR != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -23237,13 +23214,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -23270,7 +23240,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -23398,13 +23370,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -23431,7 +23396,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -23559,13 +23526,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -23592,7 +23552,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -23720,13 +23682,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -23753,7 +23708,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -23933,7 +23890,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
@@ -24025,7 +23982,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
@@ -24117,7 +24074,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
@@ -24208,7 +24165,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
@@ -25028,11 +24985,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_VAR != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -26252,13 +26208,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -26285,7 +26234,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -26413,13 +26364,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -26446,7 +26390,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -26574,13 +26520,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -26607,7 +26546,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -26735,13 +26676,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
 
        if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -26768,7 +26702,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -26948,7 +26884,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
@@ -27040,7 +26976,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
@@ -27132,7 +27068,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
@@ -27223,7 +27159,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_VAR != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
@@ -27969,11 +27905,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_UNUSED != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -28899,13 +28834,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -28932,7 +28860,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -29060,13 +28990,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -29093,7 +29016,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -29221,13 +29146,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -29254,7 +29172,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -29382,13 +29302,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -29415,7 +29328,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -30794,11 +30709,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_UNUSED != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -31574,11 +31488,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_UNUSED != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -32504,13 +32417,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -32537,7 +32443,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -32665,13 +32573,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -32698,7 +32599,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -32826,13 +32729,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -32859,7 +32755,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -32987,13 +32885,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -33020,7 +32911,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -34067,11 +33960,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_UNUSED != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -35002,13 +34894,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -35035,7 +34920,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -35163,13 +35050,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -35196,7 +35076,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -35324,13 +35206,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -35357,7 +35232,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -35485,13 +35362,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
 
        if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -35518,7 +35388,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -38822,11 +38694,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_CV != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -40315,13 +40186,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -40348,7 +40212,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -40476,13 +40342,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -40509,7 +40368,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -40637,13 +40498,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -40670,7 +40524,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -40798,13 +40654,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -40831,7 +40680,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -41011,7 +40862,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = EX_CONSTANT(opline->op2);
@@ -41103,7 +40954,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = EX_CONSTANT(opline->op2);
@@ -41195,7 +41046,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = EX_CONSTANT(opline->op2);
@@ -41286,7 +41137,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = EX_CONSTANT(opline->op2);
@@ -43496,11 +43347,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_CV != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -44164,7 +44014,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = NULL;
@@ -44256,7 +44106,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = NULL;
@@ -44348,7 +44198,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = NULL;
@@ -44439,7 +44289,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = NULL;
@@ -45852,11 +45702,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_CV != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -47206,13 +47055,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -47239,7 +47081,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -47367,13 +47211,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -47400,7 +47237,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -47528,13 +47367,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -47561,7 +47393,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -47689,13 +47523,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -47722,7 +47549,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -47902,7 +47731,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
@@ -47994,7 +47823,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
@@ -48086,7 +47915,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
@@ -48177,7 +48006,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
@@ -49935,11 +49764,10 @@ assign_dim_op_convert_to_array:
                                        zend_check_string_offset(dim, BP_VAR_RW);
                                        zend_wrong_string_offset();
                                }
+                       } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
+                               goto assign_dim_op_convert_to_array;
                        } else {
-                               if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
-                                       goto assign_dim_op_convert_to_array;
-                               }
-                               if (UNEXPECTED(IS_CV != IS_VAR || !Z_ISERROR_P(container))) {
+                               if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) {
                                        zend_error(E_WARNING, "Cannot use a scalar value as an array");
                                }
 assign_dim_op_ret_null:
@@ -51295,13 +51123,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -51328,7 +51149,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -51456,13 +51279,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -51489,7 +51305,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -51617,13 +51435,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-                               zval_ptr_dtor_nogc(free_op_data);
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -51650,7 +51461,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -51778,13 +51591,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
 
        if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                do {
-                       if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(object))) {
-                               if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
-                                       ZVAL_NULL(EX_VAR(opline->result.var));
-                               }
-
-                               goto exit_assign_obj;
-                       }
                        if (Z_ISREF_P(object)) {
                                object = Z_REFVAL_P(object);
                                if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
@@ -51811,7 +51617,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
                                }
                                Z_DELREF_P(object);
                        } else {
-                               zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
+                                       zend_error(E_WARNING, "Attempt to assign property of non-object");
+                               }
                                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                        ZVAL_NULL(EX_VAR(opline->result.var));
                                }
@@ -51991,7 +51799,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
@@ -52083,7 +51891,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
@@ -52175,7 +51983,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
@@ -52266,7 +52074,7 @@ try_assign_dim_array:
                        zend_hash_init(Z_ARRVAL_P(object_ptr), 8, NULL, ZVAL_PTR_DTOR, 0);
                        goto try_assign_dim_array;
                } else {
-                       if (IS_CV != IS_VAR || UNEXPECTED(!Z_ISERROR_P(object_ptr))) {
+                       if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
                                zend_error(E_WARNING, "Cannot use a scalar value as an array");
                        }
                        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);