]> granicus.if.org Git - php/commitdiff
Consolidate indirect string offset modification checks (Nikita, Dmitry)
authorDmitry Stogov <dmitry@zend.com>
Wed, 23 Dec 2015 10:52:15 +0000 (13:52 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 23 Dec 2015 10:52:15 +0000 (13:52 +0300)
Check it once, instead of dozens of times.

Zend/zend_execute.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index e287abf470d3384500b0fa8d2415e6defeb6008a..6f8c70f01487c4f9fc820348e88e5b12b07380f0 100644 (file)
@@ -1704,6 +1704,120 @@ try_again:
        return offset;
 }
 
+static zend_never_inline void zend_wrong_string_offset(void)
+{
+       const char *msg = NULL;
+       const zend_op *opline = EG(current_execute_data)->opline;
+       const zend_op *end;
+       uint32_t var;
+
+       switch (opline->opcode) {
+               case ZEND_ASSIGN_ADD:
+               case ZEND_ASSIGN_SUB:
+               case ZEND_ASSIGN_MUL:
+               case ZEND_ASSIGN_DIV:
+               case ZEND_ASSIGN_MOD:
+               case ZEND_ASSIGN_SL:
+               case ZEND_ASSIGN_SR:
+               case ZEND_ASSIGN_CONCAT:
+               case ZEND_ASSIGN_BW_OR:
+               case ZEND_ASSIGN_BW_AND:
+               case ZEND_ASSIGN_BW_XOR:
+               case ZEND_ASSIGN_POW:
+                       msg = "Cannot use assign-op operators with string offsets";
+                       break;
+               case ZEND_FETCH_DIM_W:
+               case ZEND_FETCH_DIM_RW:
+               case ZEND_FETCH_DIM_FUNC_ARG:
+               case ZEND_FETCH_DIM_UNSET:
+                       /* TODO: Encode the "reason" into opline->extended_value??? */
+                       var = opline->result.var;
+                       opline++;
+                       end = EG(current_execute_data)->func->op_array.opcodes +
+                               EG(current_execute_data)->func->op_array.last;
+                       while (opline < end) {
+                               if (opline->op1_type == IS_VAR && opline->op1.var == var) {
+                                       switch (opline->opcode) {
+                                               case ZEND_ASSIGN_ADD:
+                                               case ZEND_ASSIGN_SUB:
+                                               case ZEND_ASSIGN_MUL:
+                                               case ZEND_ASSIGN_DIV:
+                                               case ZEND_ASSIGN_MOD:
+                                               case ZEND_ASSIGN_SL:
+                                               case ZEND_ASSIGN_SR:
+                                               case ZEND_ASSIGN_CONCAT:
+                                               case ZEND_ASSIGN_BW_OR:
+                                               case ZEND_ASSIGN_BW_AND:
+                                               case ZEND_ASSIGN_BW_XOR:
+                                               case ZEND_ASSIGN_POW:
+                                                       if (opline->extended_value == ZEND_ASSIGN_OBJ) {
+                                                               msg = "Cannot use string offset as an object";
+                                                       } else if (opline->extended_value == ZEND_ASSIGN_DIM) {
+                                                               msg = "Cannot use string offset as an array";
+                                                       } else {
+                                                               msg = "Cannot use assign-op operators with string offsets";
+                                                       }
+                                                       break;
+                                               case ZEND_PRE_INC_OBJ:
+                                               case ZEND_PRE_DEC_OBJ:
+                                               case ZEND_POST_INC_OBJ:
+                                               case ZEND_POST_DEC_OBJ:
+                                               case ZEND_PRE_INC:
+                                               case ZEND_PRE_DEC:
+                                               case ZEND_POST_INC:
+                                               case ZEND_POST_DEC:
+                                                       msg = "Cannot increment/decrement string offsets";
+                                                       break;
+                                               case ZEND_FETCH_DIM_W:
+                                               case ZEND_FETCH_DIM_RW:
+                                               case ZEND_FETCH_DIM_FUNC_ARG:
+                                               case ZEND_FETCH_DIM_UNSET:
+                                               case ZEND_ASSIGN_DIM:
+                                                       msg = "Cannot use string offset as an array";
+                                                       break;
+                                               case ZEND_FETCH_OBJ_W:
+                                               case ZEND_FETCH_OBJ_RW:
+                                               case ZEND_FETCH_OBJ_FUNC_ARG:
+                                               case ZEND_FETCH_OBJ_UNSET:
+                                               case ZEND_ASSIGN_OBJ:
+                                                       msg = "Cannot use string offset as an object";
+                                                       break;
+                                               case ZEND_ASSIGN_REF:
+                                               case ZEND_ADD_ARRAY_ELEMENT:
+                                               case ZEND_INIT_ARRAY:
+                                                       msg = "Cannot create references to/from string offsets";
+                                                       break;
+                                               case ZEND_RETURN_BY_REF:
+                                                       msg = "Cannot return string offsets by reference";
+                                                       break;
+                                               case ZEND_UNSET_DIM:
+                                               case ZEND_UNSET_OBJ:
+                                                       msg = "Cannot unset string offsets";
+                                                       break;
+                                               case ZEND_YIELD:
+                                                       msg = "Cannot yield string offsets by reference";
+                                                       break;
+                                               case ZEND_SEND_REF:
+                                               case ZEND_SEND_VAR_EX:
+                                                       msg = "Only variables can be passed by reference";
+                                                       break;
+                                               EMPTY_SWITCH_DEFAULT_CASE();
+                                       }
+                                       break;
+                               }
+                               if (opline->op2_type == IS_VAR && opline->op2.var == var) {
+                                       ZEND_ASSERT(opline->opcode == ZEND_ASSIGN_REF);
+                                       msg = "Cannot create references to/from string offsets";
+                                       break;
+                               }
+                       }
+                       break;
+               EMPTY_SWITCH_DEFAULT_CASE();
+       }
+       ZEND_ASSERT(msg != NULL);
+       zend_throw_error(NULL, msg);
+}
+
 static zend_always_inline zend_long zend_fetch_string_offset(zval *container, zval *dim, int type)
 {
        zend_long offset = zend_check_string_offset(dim, type);
@@ -1754,11 +1868,11 @@ convert_to_array:
 
                if (dim == NULL) {
                        zend_throw_error(NULL, "[] operator not supported for strings");
-                       ZVAL_INDIRECT(result, &EG(error_zval));
                } else {
                        zend_check_string_offset(dim, type);
-                       ZVAL_INDIRECT(result, NULL); /* wrong string offset */
+                       zend_wrong_string_offset();
                }
+               ZVAL_INDIRECT(result, &EG(error_zval));
        } else if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
                if (!Z_OBJ_HT_P(container)->read_dimension) {
                        zend_throw_error(NULL, "Cannot use object as array");
index cc03508fbc768f698980395a8a5c3bb01cbbdbeb..3f96086b97e0fee42bb32d84ba35da8073d33956 100644 (file)
@@ -720,13 +720,6 @@ ZEND_VM_HELPER(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
 
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               FREE_OP2();
-               HANDLE_EXCEPTION();
-       }
-
        do {
                value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
 
@@ -779,12 +772,6 @@ ZEND_VM_HELPER(zend_binary_assign_op_dim_helper, VAR|UNUSED|CV, CONST|TMPVAR|UNU
                FREE_UNFETCHED_OP2();
                HANDLE_EXCEPTION();
        }
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               FREE_UNFETCHED_OP2();
-               HANDLE_EXCEPTION();
-       }
 
        dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
@@ -805,14 +792,6 @@ ZEND_VM_HELPER(zend_binary_assign_op_dim_helper, VAR|UNUSED|CV, CONST|TMPVAR|UNU
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-                       FREE_OP2();
-                       FREE_OP(free_op_data1);
-                       FREE_OP1_VAR_PTR();
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -846,12 +825,6 @@ ZEND_VM_HELPER(zend_binary_assign_op_helper, VAR|CV, CONST|TMPVAR|CV, binary_op_
        value = GET_OP2_ZVAL_PTR(BP_VAR_R);
        var_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-               FREE_OP2();
-               HANDLE_EXCEPTION();
-       }
-
        if (OP1_TYPE == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -1131,12 +1104,6 @@ ZEND_VM_HELPER(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
 
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               FREE_OP2();
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -1212,12 +1179,6 @@ ZEND_VM_HELPER(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
 
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               FREE_OP2();
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -1278,12 +1239,6 @@ ZEND_VM_HANDLER(34, ZEND_PRE_INC, VAR|CV, ANY)
 
        var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                fast_long_increment_function(var_ptr);
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -1324,12 +1279,6 @@ ZEND_VM_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY)
 
        var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                fast_long_decrement_function(var_ptr);
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -1370,12 +1319,6 @@ ZEND_VM_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY)
 
        var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
                fast_long_increment_function(var_ptr);
@@ -1409,12 +1352,6 @@ ZEND_VM_HANDLER(37, ZEND_POST_DEC, VAR|CV, ANY)
 
        var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
                fast_long_decrement_function(var_ptr);
@@ -1764,10 +1701,6 @@ ZEND_VM_HANDLER(84, ZEND_FETCH_DIM_W, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
        SAVE_OPLINE();
        container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR(BP_VAR_R), OP2_TYPE);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -1786,10 +1719,6 @@ ZEND_VM_HANDLER(87, ZEND_FETCH_DIM_RW, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
        SAVE_OPLINE();
        container = GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR(BP_VAR_R), OP2_TYPE);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -1829,11 +1758,6 @@ ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUS
                        HANDLE_EXCEPTION();
         }
                container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
-               if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-                       FREE_UNFETCHED_OP2();
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR(BP_VAR_R), OP2_TYPE);
                if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -1864,11 +1788,6 @@ ZEND_VM_HANDLER(96, ZEND_FETCH_DIM_UNSET, VAR|CV, CONST|TMPVAR|CV)
        SAVE_OPLINE();
        container = GET_OP1_ZVAL_PTR_PTR(BP_VAR_UNSET);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP2();
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR(BP_VAR_R), OP2_TYPE);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -1967,11 +1886,6 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
                FREE_OP2();
                HANDLE_EXCEPTION();
        }
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_OP2();
-               HANDLE_EXCEPTION();
-       }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
        FREE_OP2();
@@ -1998,11 +1912,6 @@ ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
                FREE_OP2();
                HANDLE_EXCEPTION();
        }
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_OP2();
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -2110,11 +2019,6 @@ ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|THIS|CV, CONST
                        FREE_OP1_VAR_PTR();
                        HANDLE_EXCEPTION();
                }
-               if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-                       FREE_OP2();
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                FREE_OP2();
                if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -2144,11 +2048,6 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
 
        property = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_OP2();
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
        FREE_OP2();
        if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -2220,11 +2119,6 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
 
        property_name = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_OP2();
-               HANDLE_EXCEPTION();
-       }
        zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, OP1_TYPE, property_name, OP2_TYPE, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
        FREE_OP2();
        FREE_OP1_VAR_PTR();
@@ -2245,13 +2139,6 @@ ZEND_VM_HANDLER(147, ZEND_ASSIGN_DIM, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
        SAVE_OPLINE();
        object_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               FREE_UNFETCHED_OP2();
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
 ZEND_VM_C_LABEL(try_assign_dim_array):
                if (OP2_TYPE == IS_UNUSED) {
@@ -2376,11 +2263,6 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
        SAVE_OPLINE();
        value_ptr = GET_OP2_ZVAL_PTR_PTR(BP_VAR_W);
 
-       if (OP2_TYPE == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot create references to/from string offsets");
-               FREE_UNFETCHED_OP1();
-               HANDLE_EXCEPTION();
-       }
        if (OP1_TYPE == IS_VAR &&
            UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
            UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
@@ -2404,11 +2286,6 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
        }
 
        variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(variable_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot create references to/from string offsets");
-               FREE_OP2_VAR_PTR();
-               HANDLE_EXCEPTION();
-       }
        if ((OP1_TYPE == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
            (OP2_TYPE == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
                variable_ptr = &EG(uninitialized_zval);
@@ -4103,11 +3980,6 @@ ZEND_VM_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC)
 
                retval_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
 
-               if (OP1_TYPE == IS_VAR && UNEXPECTED(retval_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot return string offsets by reference");
-                       HANDLE_EXCEPTION();
-               }
-
                if (OP1_TYPE == IS_VAR) {
                        if (retval_ptr == &EG(uninitialized_zval) ||
                            (opline->extended_value == ZEND_RETURNS_FUNCTION &&
@@ -4402,13 +4274,6 @@ ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, NUM)
        SAVE_OPLINE();
        varptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
 
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(varptr == NULL)) {
-               zend_throw_error(NULL, "Only variables can be passed by reference");
-               arg = ZEND_CALL_VAR(EX(call), opline->result.var);
-               ZVAL_UNDEF(arg);
-               HANDLE_EXCEPTION();
-       }
-
        arg = ZEND_CALL_VAR(EX(call), opline->result.var);
        if (OP1_TYPE == IS_VAR && UNEXPECTED(varptr == &EG(error_zval))) {
                ZVAL_NEW_REF(arg, &EG(uninitialized_zval));
@@ -5255,11 +5120,6 @@ ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSE
        if ((OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
-               if (OP1_TYPE == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
                FREE_OP1_VAR_PTR();
@@ -5735,11 +5595,6 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
                FREE_UNFETCHED_OP2();
                HANDLE_EXCEPTION();
        }
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-               FREE_UNFETCHED_OP2();
-               HANDLE_EXCEPTION();
-       }
        offset = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
 
        do {
@@ -5832,11 +5687,6 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
                FREE_UNFETCHED_OP2();
                HANDLE_EXCEPTION();
        }
-       if (OP1_TYPE == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-               FREE_UNFETCHED_OP2();
-               HANDLE_EXCEPTION();
-       }
        offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
        do {
@@ -7509,12 +7359,6 @@ ZEND_VM_HANDLER(160, ZEND_YIELD, CONST|TMP|VAR|CV|UNUSED, CONST|TMP|VAR|CV|UNUSE
                        } else {
                                zval *value_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
 
-                               if (OP1_TYPE == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       FREE_UNFETCHED_OP2();
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (OP1_TYPE == IS_VAR &&
index a1a7834766dbbf91f1d391b46bed5349fe4d25d1..04d789592a4d9aa98821f02da6e458f2aead7e21 100644 (file)
@@ -3156,11 +3156,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDL
 
                retval_ptr = NULL;
 
-               if (IS_CONST == IS_VAR && UNEXPECTED(retval_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot return string offsets by reference");
-                       HANDLE_EXCEPTION();
-               }
-
                if (IS_CONST == IS_VAR) {
                        if (retval_ptr == &EG(uninitialized_zval) ||
                            (opline->extended_value == ZEND_RETURNS_FUNCTION &&
@@ -5116,11 +5111,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
                        HANDLE_EXCEPTION();
         }
                container = NULL;
-               if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
                if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -5309,11 +5299,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
 
-                       HANDLE_EXCEPTION();
-               }
-               if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-
                        HANDLE_EXCEPTION();
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
@@ -5915,11 +5900,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C
        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = NULL;
-               if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -6437,12 +6417,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_CONST == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_CONST == IS_VAR &&
@@ -6614,12 +6588,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMP_HANDLER(Z
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_CONST == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_CONST == IS_VAR &&
@@ -7071,12 +7039,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_VAR_HANDLER(Z
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_CONST == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_CONST == IS_VAR &&
@@ -7455,11 +7417,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
                        HANDLE_EXCEPTION();
         }
                container = NULL;
-               if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
                if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -7687,11 +7644,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_U
        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = NULL;
-               if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -8124,12 +8076,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLE
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_CONST == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_CONST == IS_VAR &&
@@ -8904,11 +8850,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
                        HANDLE_EXCEPTION();
         }
                container = NULL;
-               if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
                if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -9097,11 +9038,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
 
-                       HANDLE_EXCEPTION();
-               }
-               if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-
                        HANDLE_EXCEPTION();
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
@@ -9627,11 +9563,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C
        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = NULL;
-               if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -9972,12 +9903,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZE
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_CONST == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_CONST == IS_VAR &&
@@ -10716,11 +10641,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
                        HANDLE_EXCEPTION();
         }
                container = NULL;
-               if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
                if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -10913,11 +10833,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
 
                        HANDLE_EXCEPTION();
                }
-               if (IS_CONST == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-                       zval_ptr_dtor_nogc(free_op2);
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                zval_ptr_dtor_nogc(free_op2);
                if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -11393,11 +11308,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_T
        if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = NULL;
-               if (IS_CONST == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -11778,11 +11688,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER
 
                retval_ptr = NULL;
 
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(retval_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot return string offsets by reference");
-                       HANDLE_EXCEPTION();
-               }
-
                if (IS_TMP_VAR == IS_VAR) {
                        if (retval_ptr == &EG(uninitialized_zval) ||
                            (opline->extended_value == ZEND_RETURNS_FUNCTION &&
@@ -12607,11 +12512,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CO
                        HANDLE_EXCEPTION();
         }
                container = NULL;
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
                if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -12728,11 +12628,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CO
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
 
-                       HANDLE_EXCEPTION();
-               }
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-
                        HANDLE_EXCEPTION();
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
@@ -12843,11 +12738,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CON
        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = NULL;
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -13005,12 +12895,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(Z
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_TMP_VAR == IS_VAR &&
@@ -13182,12 +13066,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEN
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_TMP_VAR == IS_VAR &&
@@ -13359,12 +13237,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEN
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_TMP_VAR == IS_VAR &&
@@ -13474,11 +13346,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UN
                        HANDLE_EXCEPTION();
         }
                container = NULL;
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
                if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -13565,11 +13432,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNU
        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = NULL;
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -13727,12 +13589,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_TMP_VAR == IS_VAR &&
@@ -13878,11 +13734,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV
                        HANDLE_EXCEPTION();
         }
                container = NULL;
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
                if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -13999,11 +13850,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
 
-                       HANDLE_EXCEPTION();
-               }
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-
                        HANDLE_EXCEPTION();
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
@@ -14114,11 +13960,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_
        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = NULL;
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -14276,12 +14117,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_TMP_VAR == IS_VAR &&
@@ -14391,11 +14226,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TM
                        HANDLE_EXCEPTION();
         }
                container = NULL;
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
                if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -14515,11 +14345,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TM
 
                        HANDLE_EXCEPTION();
                }
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-                       zval_ptr_dtor_nogc(free_op2);
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                zval_ptr_dtor_nogc(free_op2);
                if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -14628,11 +14453,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP
        if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = NULL;
-               if (IS_TMP_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -14756,12 +14576,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_HANDLER(ZEND_
 
        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                fast_long_increment_function(var_ptr);
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -14802,12 +14616,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_
 
        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                fast_long_decrement_function(var_ptr);
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -14848,12 +14656,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND
 
        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
                fast_long_increment_function(var_ptr);
@@ -14887,12 +14689,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND
 
        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
                fast_long_decrement_function(var_ptr);
@@ -14999,11 +14795,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER
 
                retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-               if (IS_VAR == IS_VAR && UNEXPECTED(retval_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot return string offsets by reference");
-                       HANDLE_EXCEPTION();
-               }
-
                if (IS_VAR == IS_VAR) {
                        if (retval_ptr == &EG(uninitialized_zval) ||
                            (opline->extended_value == ZEND_RETURNS_FUNCTION &&
@@ -15200,13 +14991,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND
        SAVE_OPLINE();
        varptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(varptr == NULL)) {
-               zend_throw_error(NULL, "Only variables can be passed by reference");
-               arg = ZEND_CALL_VAR(EX(call), opline->result.var);
-               ZVAL_UNDEF(arg);
-               HANDLE_EXCEPTION();
-       }
-
        arg = ZEND_CALL_VAR(EX(call), opline->result.var);
        if (IS_VAR == IS_VAR && UNEXPECTED(varptr == &EG(error_zval))) {
                ZVAL_NEW_REF(arg, &EG(uninitialized_zval));
@@ -16426,13 +16210,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
 
@@ -16485,12 +16262,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
 
        dim = EX_CONSTANT(opline->op2);
 
@@ -16511,14 +16282,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-                       FREE_OP(free_op_data1);
-                       if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -16551,12 +16314,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
        value = EX_CONSTANT(opline->op2);
        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -16835,12 +16592,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -16915,12 +16666,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -16981,10 +16726,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HAN
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -17003,10 +16744,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HA
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -17032,11 +16769,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CO
                        HANDLE_EXCEPTION();
         }
                container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
-               if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
                if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -17067,11 +16799,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -17169,11 +16896,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HAN
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -17200,11 +16922,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HA
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -17239,11 +16956,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CO
                        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
                        HANDLE_EXCEPTION();
                }
-               if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
                if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -17273,11 +16985,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -17305,11 +17012,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HAND
 
        property_name = EX_CONSTANT(opline->op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_VAR, property_name, IS_CONST, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
 
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
@@ -17330,13 +17032,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HAND
        SAVE_OPLINE();
        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
 try_assign_dim_array:
                if (IS_CONST == IS_UNUSED) {
@@ -17684,11 +17379,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CON
        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
-               if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
                if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
@@ -17820,11 +17510,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDL
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = EX_CONSTANT(opline->op2);
 
        do {
@@ -17916,11 +17601,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDL
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = EX_CONSTANT(opline->op2);
 
        do {
@@ -17987,12 +17667,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(Z
                        } else {
                                zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-                               if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_VAR == IS_VAR &&
@@ -18193,12 +17867,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEN
                        } else {
                                zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-                               if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_VAR == IS_VAR &&
@@ -18367,11 +18035,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLE
        SAVE_OPLINE();
        value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot create references to/from string offsets");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
-               HANDLE_EXCEPTION();
-       }
        if (IS_VAR == IS_VAR &&
            UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
            UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
@@ -18395,11 +18058,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLE
        }
 
        variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
-       if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot create references to/from string offsets");
-               if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
-               HANDLE_EXCEPTION();
-       }
        if ((IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
            (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
                variable_ptr = &EG(uninitialized_zval);
@@ -18459,12 +18117,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEN
                        } else {
                                zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-                               if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_VAR == IS_VAR &&
@@ -18574,12 +18226,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
 
        dim = NULL;
 
@@ -18600,14 +18246,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-                       FREE_OP(free_op_data1);
-                       if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -18878,10 +18516,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HA
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -18900,10 +18534,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_H
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -18929,11 +18559,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UN
                        HANDLE_EXCEPTION();
         }
                container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
-               if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
                if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -18968,13 +18593,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HAN
        SAVE_OPLINE();
        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
 try_assign_dim_array:
                if (IS_UNUSED == IS_UNUSED) {
@@ -19267,11 +18885,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNU
        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
-               if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
                if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
@@ -19446,12 +19059,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(
                        } else {
                                zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-                               if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_VAR == IS_VAR &&
@@ -19603,13 +19210,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
 
@@ -19662,12 +19262,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
 
        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
@@ -19688,14 +19282,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-                       FREE_OP(free_op_data1);
-                       if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -19728,12 +19314,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
        value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -20012,12 +19592,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -20092,12 +19666,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -20158,10 +19726,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLE
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -20180,10 +19744,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDL
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -20209,11 +19769,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV
                        HANDLE_EXCEPTION();
         }
                container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
-               if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
                if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -20244,11 +19799,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HA
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -20346,11 +19896,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLE
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -20377,11 +19922,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDL
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -20416,11 +19956,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV
                        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
                        HANDLE_EXCEPTION();
                }
-               if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
                if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -20450,11 +19985,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HA
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
 
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -20482,11 +20012,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER
 
        property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_VAR, property_name, IS_CV, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
 
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
@@ -20507,13 +20032,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER
        SAVE_OPLINE();
        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
 try_assign_dim_array:
                if (IS_CV == IS_UNUSED) {
@@ -20638,11 +20156,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER
        SAVE_OPLINE();
        value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op2.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot create references to/from string offsets");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
-               HANDLE_EXCEPTION();
-       }
        if (IS_VAR == IS_VAR &&
            UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
            UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
@@ -20666,11 +20179,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER
        }
 
        variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
-       if (IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot create references to/from string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        if ((IS_VAR == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
            (IS_CV == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
                variable_ptr = &EG(uninitialized_zval);
@@ -20838,11 +20346,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_
        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
-               if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
                if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
@@ -20974,11 +20477,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
 
        do {
@@ -21070,11 +20568,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(
 
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
        do {
@@ -21141,12 +20634,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND
                        } else {
                                zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-                               if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_VAR == IS_VAR &&
@@ -21262,13 +20749,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        do {
                value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
 
@@ -21321,12 +20801,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
 
        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
@@ -21347,14 +20821,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-                       zval_ptr_dtor_nogc(free_op2);
-                       FREE_OP(free_op_data1);
-                       if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -21388,12 +20854,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
        value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        if (IS_VAR == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -21673,12 +21133,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -21754,12 +21208,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -21821,10 +21269,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HA
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
        zval_ptr_dtor_nogc(free_op2);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -21843,10 +21287,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_H
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
        zval_ptr_dtor_nogc(free_op2);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -21872,11 +21312,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TM
                        HANDLE_EXCEPTION();
         }
                container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
-               if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
                if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -21907,11 +21342,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVA
        SAVE_OPLINE();
        container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
        zval_ptr_dtor_nogc(free_op2);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -22010,11 +21440,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HA
                zval_ptr_dtor_nogc(free_op2);
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
        zval_ptr_dtor_nogc(free_op2);
@@ -22041,11 +21466,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_H
                zval_ptr_dtor_nogc(free_op2);
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -22080,11 +21500,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TM
                        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
                        HANDLE_EXCEPTION();
                }
-               if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-                       zval_ptr_dtor_nogc(free_op2);
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                zval_ptr_dtor_nogc(free_op2);
                if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -22114,11 +21529,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVA
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -22146,11 +21556,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_HAN
 
        property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
        zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_VAR, property_name, (IS_TMP_VAR|IS_VAR), (opline+1)->op1_type, (opline+1)->op1, execute_data, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
        zval_ptr_dtor_nogc(free_op2);
        if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
@@ -22171,13 +21576,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_HAN
        SAVE_OPLINE();
        object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
 try_assign_dim_array:
                if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
@@ -22415,11 +21813,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP
        if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
-               if (IS_VAR == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
                if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
@@ -22551,11 +21944,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HAND
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
        do {
@@ -22648,11 +22036,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HAND
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                HANDLE_EXCEPTION();
        }
-       if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
        do {
@@ -22861,13 +22244,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
 
@@ -22920,12 +22296,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
 
        dim = EX_CONSTANT(opline->op2);
 
@@ -22946,14 +22316,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-                       FREE_OP(free_op_data1);
-
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -23234,12 +22596,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -23314,12 +22670,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -23459,11 +22809,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -23490,11 +22835,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
 
        if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -23599,11 +22939,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
 
-                       HANDLE_EXCEPTION();
-               }
-               if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-
                        HANDLE_EXCEPTION();
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
@@ -23635,11 +22970,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CO
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
 
        if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -23667,11 +22997,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_H
 
        property_name = EX_CONSTANT(opline->op2);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_UNUSED, property_name, IS_CONST, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
 
 
@@ -24145,11 +23470,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HA
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = EX_CONSTANT(opline->op2);
 
        do {
@@ -24241,11 +23561,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HA
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = EX_CONSTANT(opline->op2);
 
        do {
@@ -24495,12 +23810,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLE
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_UNUSED == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_UNUSED == IS_VAR &&
@@ -24594,148 +23903,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLE
        ZEND_VM_RETURN();
 }
 
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       USE_OPLINE
-
-       zend_generator *generator = zend_get_running_generator(execute_data);
-
-       SAVE_OPLINE();
-       if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
-               zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-
-               HANDLE_EXCEPTION();
-       }
-
-       /* Destroy the previously yielded value */
-       zval_ptr_dtor(&generator->value);
-
-       /* Destroy the previously yielded key */
-       zval_ptr_dtor(&generator->key);
-
-       /* Set the new yielded value */
-       if (IS_UNUSED != IS_UNUSED) {
-
-
-               if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
-                       /* Constants and temporary variables aren't yieldable by reference,
-                        * but we still allow them with a notice. */
-                       if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
-                               zval *value;
-
-                               zend_error(E_NOTICE, "Only variable references should be yielded by reference");
-
-                               value = NULL;
-                               ZVAL_COPY_VALUE(&generator->value, value);
-                               if (IS_UNUSED != IS_CONST) {
-                                       if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
-                                               zval_copy_ctor_func(&generator->value);
-                                       }
-                               }
-                       } else {
-                               zval *value_ptr = NULL;
-
-                               if (IS_UNUSED == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                                       HANDLE_EXCEPTION();
-                               }
-
-                               /* If a function call result is yielded and the function did
-                                * not return by reference we throw a notice. */
-                               if (IS_UNUSED == IS_VAR &&
-                                   (value_ptr == &EG(uninitialized_zval) ||
-                                    (opline->extended_value == ZEND_RETURNS_FUNCTION &&
-                                     !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
-                                       zend_error(E_NOTICE, "Only variable references should be yielded by reference");
-                               } else {
-                                       ZVAL_MAKE_REF(value_ptr);
-                               }
-                               ZVAL_COPY(&generator->value, value_ptr);
-
-                       }
-               } else {
-                       zval *value = NULL;
-
-                       /* Consts, temporary variables and references need copying */
-                       if (IS_UNUSED == IS_CONST) {
-                               ZVAL_COPY_VALUE(&generator->value, value);
-                               if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
-                                       zval_copy_ctor_func(&generator->value);
-                               }
-                       } else if (IS_UNUSED == IS_TMP_VAR) {
-                               ZVAL_COPY_VALUE(&generator->value, value);
-            } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
-                               ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
-
-                       } else {
-                               ZVAL_COPY_VALUE(&generator->value, value);
-                               if (IS_UNUSED == IS_CV) {
-                                       if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
-                               }
-                       }
-               }
-       } else {
-               /* If no value was specified yield null */
-               ZVAL_NULL(&generator->value);
-       }
-
-       /* Set the new yielded key */
-       if (IS_TMP_VAR != IS_UNUSED) {
-               zend_free_op free_op2;
-               zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
-
-               /* Consts, temporary variables and references need copying */
-               if (IS_TMP_VAR == IS_CONST) {
-                       ZVAL_COPY_VALUE(&generator->key, key);
-                       if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
-                               zval_copy_ctor_func(&generator->key);
-                       }
-               } else if (IS_TMP_VAR == IS_TMP_VAR) {
-                       ZVAL_COPY_VALUE(&generator->key, key);
-               } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
-                       ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
-
-               } else {
-                       ZVAL_COPY_VALUE(&generator->key, key);
-                       if (IS_TMP_VAR == IS_CV) {
-                               if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
-                       }
-               }
-
-               if (Z_TYPE(generator->key) == IS_LONG
-                   && Z_LVAL(generator->key) > generator->largest_used_integer_key
-               ) {
-                       generator->largest_used_integer_key = Z_LVAL(generator->key);
-               }
-       } else {
-               /* If no key was specified we use auto-increment keys */
-               generator->largest_used_integer_key++;
-               ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
-       }
-
-       if (RETURN_VALUE_USED(opline)) {
-               /* If the return value of yield is used set the send
-                * target and initialize it to NULL */
-               generator->send_target = EX_VAR(opline->result.var);
-               ZVAL_NULL(generator->send_target);
-       } else {
-               generator->send_target = NULL;
-       }
-
-       /* We increment to the next op, so we are at the correct position when the
-        * generator is resumed. */
-       ZEND_VM_INC_OPCODE();
-
-       /* The GOTO VM uses a local opline variable. We need to set the opline
-        * variable in execute_data so we don't resume at an old position. */
-       SAVE_OPLINE();
-
-       ZEND_VM_RETURN();
-}
-
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
 
@@ -24777,11 +23945,140 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_UNUSED == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                                       HANDLE_EXCEPTION();
+                               /* If a function call result is yielded and the function did
+                                * not return by reference we throw a notice. */
+                               if (IS_UNUSED == IS_VAR &&
+                                   (value_ptr == &EG(uninitialized_zval) ||
+                                    (opline->extended_value == ZEND_RETURNS_FUNCTION &&
+                                     !(Z_VAR_FLAGS_P(value_ptr) & IS_VAR_RET_REF)))) {
+                                       zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+                               } else {
+                                       ZVAL_MAKE_REF(value_ptr);
+                               }
+                               ZVAL_COPY(&generator->value, value_ptr);
+
+                       }
+               } else {
+                       zval *value = NULL;
+
+                       /* Consts, temporary variables and references need copying */
+                       if (IS_UNUSED == IS_CONST) {
+                               ZVAL_COPY_VALUE(&generator->value, value);
+                               if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
+                                       zval_copy_ctor_func(&generator->value);
+                               }
+                       } else if (IS_UNUSED == IS_TMP_VAR) {
+                               ZVAL_COPY_VALUE(&generator->value, value);
+            } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
+                               ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
+
+                       } else {
+                               ZVAL_COPY_VALUE(&generator->value, value);
+                               if (IS_UNUSED == IS_CV) {
+                                       if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+                               }
+                       }
+               }
+       } else {
+               /* If no value was specified yield null */
+               ZVAL_NULL(&generator->value);
+       }
+
+       /* Set the new yielded key */
+       if (IS_TMP_VAR != IS_UNUSED) {
+               zend_free_op free_op2;
+               zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+
+               /* Consts, temporary variables and references need copying */
+               if (IS_TMP_VAR == IS_CONST) {
+                       ZVAL_COPY_VALUE(&generator->key, key);
+                       if (UNEXPECTED(Z_OPT_COPYABLE(generator->key))) {
+                               zval_copy_ctor_func(&generator->key);
+                       }
+               } else if (IS_TMP_VAR == IS_TMP_VAR) {
+                       ZVAL_COPY_VALUE(&generator->key, key);
+               } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) {
+                       ZVAL_COPY(&generator->key, Z_REFVAL_P(key));
+
+               } else {
+                       ZVAL_COPY_VALUE(&generator->key, key);
+                       if (IS_TMP_VAR == IS_CV) {
+                               if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key);
+                       }
+               }
+
+               if (Z_TYPE(generator->key) == IS_LONG
+                   && Z_LVAL(generator->key) > generator->largest_used_integer_key
+               ) {
+                       generator->largest_used_integer_key = Z_LVAL(generator->key);
+               }
+       } else {
+               /* If no key was specified we use auto-increment keys */
+               generator->largest_used_integer_key++;
+               ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
+       }
+
+       if (RETURN_VALUE_USED(opline)) {
+               /* If the return value of yield is used set the send
+                * target and initialize it to NULL */
+               generator->send_target = EX_VAR(opline->result.var);
+               ZVAL_NULL(generator->send_target);
+       } else {
+               generator->send_target = NULL;
+       }
+
+       /* We increment to the next op, so we are at the correct position when the
+        * generator is resumed. */
+       ZEND_VM_INC_OPCODE();
+
+       /* The GOTO VM uses a local opline variable. We need to set the opline
+        * variable in execute_data so we don't resume at an old position. */
+       SAVE_OPLINE();
+
+       ZEND_VM_RETURN();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+       USE_OPLINE
+
+       zend_generator *generator = zend_get_running_generator(execute_data);
+
+       SAVE_OPLINE();
+       if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
+               zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
+               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+
+               HANDLE_EXCEPTION();
+       }
+
+       /* Destroy the previously yielded value */
+       zval_ptr_dtor(&generator->value);
+
+       /* Destroy the previously yielded key */
+       zval_ptr_dtor(&generator->key);
+
+       /* Set the new yielded value */
+       if (IS_UNUSED != IS_UNUSED) {
+
+
+               if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
+                       /* Constants and temporary variables aren't yieldable by reference,
+                        * but we still allow them with a notice. */
+                       if (IS_UNUSED == IS_CONST || IS_UNUSED == IS_TMP_VAR) {
+                               zval *value;
+
+                               zend_error(E_NOTICE, "Only variable references should be yielded by reference");
+
+                               value = NULL;
+                               ZVAL_COPY_VALUE(&generator->value, value);
+                               if (IS_UNUSED != IS_CONST) {
+                                       if (UNEXPECTED(Z_OPT_COPYABLE(generator->value))) {
+                                               zval_copy_ctor_func(&generator->value);
+                                       }
                                }
+                       } else {
+                               zval *value_ptr = NULL;
 
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
@@ -24891,12 +24188,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
 
        dim = NULL;
 
@@ -24917,14 +24208,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-                       FREE_OP(free_op_data1);
-
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -25455,12 +24738,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDL
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_UNUSED == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_UNUSED == IS_VAR &&
@@ -25575,13 +24852,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
 
@@ -25634,12 +24904,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
 
        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
@@ -25660,14 +24924,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-                       FREE_OP(free_op_data1);
-
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -25948,12 +25204,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -26028,12 +25278,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -26173,11 +25417,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HAN
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -26204,11 +25443,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HA
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
 
        if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -26313,11 +25547,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
 
-                       HANDLE_EXCEPTION();
-               }
-               if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-
                        HANDLE_EXCEPTION();
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
@@ -26349,11 +25578,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
 
        if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -26381,11 +25605,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HAND
 
        property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_UNUSED, property_name, IS_CV, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
 
 
@@ -26733,11 +25952,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDL
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
 
        do {
@@ -26829,11 +26043,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDL
 
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
        do {
@@ -27083,12 +26292,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(Z
                        } else {
                                zval *value_ptr = NULL;
 
-                               if (IS_UNUSED == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_UNUSED == IS_VAR &&
@@ -27203,13 +26406,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        do {
                value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
 
@@ -27262,12 +26458,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
 
        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
@@ -27288,14 +26478,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-                       zval_ptr_dtor_nogc(free_op2);
-                       FREE_OP(free_op_data1);
-
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -27577,12 +26759,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -27658,12 +26834,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -27805,11 +26975,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR
                zval_ptr_dtor_nogc(free_op2);
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
        zval_ptr_dtor_nogc(free_op2);
@@ -27836,11 +27001,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVA
                zval_ptr_dtor_nogc(free_op2);
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -27948,11 +27108,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
 
                        HANDLE_EXCEPTION();
                }
-               if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-                       zval_ptr_dtor_nogc(free_op2);
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                zval_ptr_dtor_nogc(free_op2);
                if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -27982,11 +27137,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TM
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -28014,11 +27164,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
 
        property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
        zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_UNUSED, property_name, (IS_TMP_VAR|IS_VAR), (opline+1)->op1_type, (opline+1)->op1, execute_data, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
        zval_ptr_dtor_nogc(free_op2);
 
@@ -28367,11 +27512,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_UNUSED_TMPVAR_H
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
        do {
@@ -28464,11 +27604,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_H
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                HANDLE_EXCEPTION();
        }
-       if (IS_UNUSED == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
        do {
@@ -28723,12 +27858,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_HANDLER(ZEND_O
 
        var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                fast_long_increment_function(var_ptr);
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -28768,12 +27897,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_HANDLER(ZEND_O
 
        var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                fast_long_decrement_function(var_ptr);
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -28813,12 +27936,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_
 
        var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
                fast_long_increment_function(var_ptr);
@@ -28851,12 +27968,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_
 
        var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               SAVE_OPLINE();
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
                ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
                fast_long_decrement_function(var_ptr);
@@ -29180,11 +28291,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(
 
                retval_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
 
-               if (IS_CV == IS_VAR && UNEXPECTED(retval_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot return string offsets by reference");
-                       HANDLE_EXCEPTION();
-               }
-
                if (IS_CV == IS_VAR) {
                        if (retval_ptr == &EG(uninitialized_zval) ||
                            (opline->extended_value == ZEND_RETURNS_FUNCTION &&
@@ -29343,13 +28449,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_
        SAVE_OPLINE();
        varptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(varptr == NULL)) {
-               zend_throw_error(NULL, "Only variables can be passed by reference");
-               arg = ZEND_CALL_VAR(EX(call), opline->result.var);
-               ZVAL_UNDEF(arg);
-               HANDLE_EXCEPTION();
-       }
-
        arg = ZEND_CALL_VAR(EX(call), opline->result.var);
        if (IS_CV == IS_VAR && UNEXPECTED(varptr == &EG(error_zval))) {
                ZVAL_NEW_REF(arg, &EG(uninitialized_zval));
@@ -31028,13 +30127,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
 
@@ -31087,12 +30179,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
 
        dim = EX_CONSTANT(opline->op2);
 
@@ -31113,14 +30199,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-                       FREE_OP(free_op_data1);
-
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -31153,12 +30231,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
        value = EX_CONSTANT(opline->op2);
        var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -31437,12 +30509,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -31517,12 +30583,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -31736,10 +30796,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HAND
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -31758,10 +30814,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HAN
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -31801,11 +30853,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CON
                        HANDLE_EXCEPTION();
         }
                container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
-               if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
                if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -31836,11 +30883,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -31938,11 +30980,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HAND
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -31969,11 +31006,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HAN
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -32078,11 +31110,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CON
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
 
-                       HANDLE_EXCEPTION();
-               }
-               if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-
                        HANDLE_EXCEPTION();
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
@@ -32114,11 +31141,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_
 
        property = EX_CONSTANT(opline->op2);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -32190,11 +31212,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDL
 
        property_name = EX_CONSTANT(opline->op2);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_CV, property_name, IS_CONST, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
 
 
@@ -32215,13 +31232,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDL
        SAVE_OPLINE();
        object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
 try_assign_dim_array:
                if (IS_CONST == IS_UNUSED) {
@@ -32598,11 +31608,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONS
        if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
-               if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -32792,11 +31797,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLE
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = EX_CONSTANT(opline->op2);
 
        do {
@@ -32888,11 +31888,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLE
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = EX_CONSTANT(opline->op2);
 
        do {
@@ -33276,12 +32271,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZE
                        } else {
                                zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
 
-                               if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_CV == IS_VAR &&
@@ -33572,12 +32561,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND
                        } else {
                                zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
 
-                               if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_CV == IS_VAR &&
@@ -33884,11 +32867,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER
        SAVE_OPLINE();
        value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot create references to/from string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        if (IS_CV == IS_VAR &&
            UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
            UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
@@ -33912,11 +32890,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER
        }
 
        variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
-       if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot create references to/from string offsets");
-               if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
-               HANDLE_EXCEPTION();
-       }
        if ((IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
            (IS_VAR == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
                variable_ptr = &EG(uninitialized_zval);
@@ -34167,12 +33140,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND
                        } else {
                                zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
 
-                               if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-                                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_CV == IS_VAR &&
@@ -34281,12 +33248,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
 
        dim = NULL;
 
@@ -34307,14 +33268,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-                       FREE_OP(free_op_data1);
-
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -34854,10 +33807,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HAN
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -34876,10 +33825,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HA
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -34905,11 +33850,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNU
                        HANDLE_EXCEPTION();
         }
                container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
-               if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
                if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -34944,13 +33884,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HAND
        SAVE_OPLINE();
        object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
 try_assign_dim_array:
                if (IS_UNUSED == IS_UNUSED) {
@@ -35102,11 +34035,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUS
        if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
-               if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -35568,12 +34496,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(Z
                        } else {
                                zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
 
-                               if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_CV == IS_VAR &&
@@ -36325,13 +35247,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
 
@@ -36384,12 +35299,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
 
        dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
@@ -36410,14 +35319,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-                       FREE_OP(free_op_data1);
-
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -36450,12 +35351,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
        value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
        var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -36734,12 +35629,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -36814,12 +35703,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -36894,10 +35777,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -36916,10 +35795,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLE
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -36959,11 +35834,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_
                        HANDLE_EXCEPTION();
         }
                container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
-               if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
                if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -36994,11 +35864,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HAN
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var), IS_CV);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -37096,11 +35961,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
 
@@ -37127,11 +35987,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLE
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -37236,11 +36091,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_
                        zend_throw_error(NULL, "Cannot use temporary expression in write context");
 
 
-                       HANDLE_EXCEPTION();
-               }
-               if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-
                        HANDLE_EXCEPTION();
                }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
@@ -37272,11 +36122,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HAN
 
        property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
 
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -37304,11 +36149,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER(
 
        property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-
-               HANDLE_EXCEPTION();
-       }
        zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_CV, property_name, IS_CV, (opline+1)->op1_type, (opline+1)->op1, execute_data, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
 
 
@@ -37329,13 +36169,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER(
        SAVE_OPLINE();
        object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
 try_assign_dim_array:
                if (IS_CV == IS_UNUSED) {
@@ -37460,11 +36293,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(
        SAVE_OPLINE();
        value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op2.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot create references to/from string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        if (IS_CV == IS_VAR &&
            UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
            UNEXPECTED(!Z_ISREF_P(EX_VAR(opline->op1.var)))) {
@@ -37488,11 +36316,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(
        }
 
        variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
-       if (IS_CV == IS_VAR && UNEXPECTED(variable_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot create references to/from string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        if ((IS_CV == IS_VAR && UNEXPECTED(variable_ptr == &EG(error_zval))) ||
            (IS_CV == IS_VAR && UNEXPECTED(value_ptr == &EG(error_zval)))) {
                variable_ptr = &EG(uninitialized_zval);
@@ -37770,11 +36593,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_H
        if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
-               if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -37906,11 +36724,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(Z
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
 
        do {
@@ -38002,11 +36815,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(Z
 
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
 
        do {
@@ -38256,12 +37064,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_
                        } else {
                                zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
 
-                               if (IS_CV == IS_VAR && UNEXPECTED(value_ptr == NULL)) {
-                                       zend_throw_error(NULL, "Cannot yield string offsets by reference");
-
-                                       HANDLE_EXCEPTION();
-                               }
-
                                /* If a function call result is yielded and the function did
                                 * not return by reference we throw a notice. */
                                if (IS_CV == IS_VAR &&
@@ -38977,13 +37779,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        do {
                value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
 
@@ -39036,12 +37831,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
 
        dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
@@ -39062,14 +37851,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
                ZEND_ASSERT(Z_TYPE(rv) == IS_INDIRECT);
                var_ptr = Z_INDIRECT(rv);
 
-               if (UNEXPECTED(var_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-                       zval_ptr_dtor_nogc(free_op2);
-                       FREE_OP(free_op_data1);
-
-                       HANDLE_EXCEPTION();
-               }
-
                if (UNEXPECTED(var_ptr == &EG(error_zval))) {
                        if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                                ZVAL_NULL(EX_VAR(opline->result.var));
@@ -39103,12 +37884,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
        value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
        var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use assign-op operators with string offsets");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        if (IS_CV == IS_VAR && UNEXPECTED(var_ptr == &EG(error_zval))) {
                if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
                        ZVAL_NULL(EX_VAR(opline->result.var));
@@ -39388,12 +38163,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -39469,12 +38238,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot increment/decrement string offsets");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
-
        do {
                if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
                        ZVAL_DEREF(object);
@@ -39550,10 +38313,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HAN
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
        zval_ptr_dtor_nogc(free_op2);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -39572,10 +38331,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HA
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
        zval_ptr_dtor_nogc(free_op2);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -39615,11 +38370,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP
                        HANDLE_EXCEPTION();
         }
                container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
-               if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an array");
-                       zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
                if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
                        EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var), 1);
@@ -39650,11 +38400,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR
        SAVE_OPLINE();
        container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
        zval_ptr_dtor_nogc(free_op2);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -39753,11 +38498,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HAN
                zval_ptr_dtor_nogc(free_op2);
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
 
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
        zval_ptr_dtor_nogc(free_op2);
@@ -39784,11 +38524,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HA
                zval_ptr_dtor_nogc(free_op2);
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -39896,11 +38631,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP
 
                        HANDLE_EXCEPTION();
                }
-               if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-                       zend_throw_error(NULL, "Cannot use string offset as an object");
-                       zval_ptr_dtor_nogc(free_op2);
-                       HANDLE_EXCEPTION();
-               }
                zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
                zval_ptr_dtor_nogc(free_op2);
                if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -39930,11 +38660,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR
 
        property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
        zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
        zval_ptr_dtor_nogc(free_op2);
        if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -39962,11 +38687,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_HAND
 
        property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an object");
-               zval_ptr_dtor_nogc(free_op2);
-               HANDLE_EXCEPTION();
-       }
        zend_assign_to_object(UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, object, IS_CV, property_name, (IS_TMP_VAR|IS_VAR), (opline+1)->op1_type, (opline+1)->op1, execute_data, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL));
        zval_ptr_dtor_nogc(free_op2);
 
@@ -39987,13 +38707,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_HAND
        SAVE_OPLINE();
        object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
 
-       if (IS_CV == IS_VAR && UNEXPECTED(object_ptr == NULL)) {
-               zend_throw_error(NULL, "Cannot use string offset as an array");
-               FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
-
        if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
 try_assign_dim_array:
                if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
@@ -40343,11 +39056,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPV
        if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
            UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
                expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
-               if (IS_CV == IS_VAR && UNEXPECTED(expr_ptr == NULL)) {
-                       zend_throw_error(NULL, "Cannot create references to/from string offsets");
-                       zend_array_destroy(Z_ARRVAL_P(EX_VAR(opline->result.var)));
-                       HANDLE_EXCEPTION();
-               }
                ZVAL_MAKE_REF(expr_ptr);
                Z_ADDREF_P(expr_ptr);
 
@@ -40479,11 +39187,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDL
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
        do {
@@ -40576,11 +39279,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDL
                zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
                HANDLE_EXCEPTION();
        }
-       if (IS_CV == IS_VAR && UNEXPECTED(container == NULL)) {
-               zend_throw_error(NULL, "Cannot unset string offsets");
-               zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-               HANDLE_EXCEPTION();
-       }
        offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
 
        do {