From 1097ea759a5c921123bd5a58a66112226645fe52 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Fri, 11 Apr 2025 13:37:47 +0200 Subject: [PATCH 1/2] Promote undeclared variables to errors --- Zend/Optimizer/zend_inference.c | 3 +- Zend/zend.c | 28 +++++++++++++ Zend/zend.h | 1 + Zend/zend_compile.c | 23 ++++++----- Zend/zend_execute.c | 16 +++----- Zend/zend_types.h | 2 + Zend/zend_vm_def.h | 7 +++- Zend/zend_vm_execute.h | 69 ++++++++++++++++++++++++++++++++- 8 files changed, 124 insertions(+), 25 deletions(-) diff --git a/Zend/Optimizer/zend_inference.c b/Zend/Optimizer/zend_inference.c index fc6b9b421b628..b37bfd29e9484 100644 --- a/Zend/Optimizer/zend_inference.c +++ b/Zend/Optimizer/zend_inference.c @@ -5007,7 +5007,6 @@ ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op case ZEND_NOP: case ZEND_QM_ASSIGN: case ZEND_JMP: - case ZEND_CHECK_VAR: case ZEND_MAKE_REF: case ZEND_BEGIN_SILENCE: case ZEND_END_SILENCE: @@ -5029,6 +5028,8 @@ ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op case ZEND_JMP_NULL: case ZEND_JMP_FRAMELESS: return 0; + case ZEND_CHECK_VAR: + return t1 & MAY_BE_UNDEF; case ZEND_IS_IDENTICAL: case ZEND_IS_NOT_IDENTICAL: case ZEND_CASE_STRICT: diff --git a/Zend/zend.c b/Zend/zend.c index 2d8a0f455f8b4..893ff81d1a770 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -1807,6 +1807,34 @@ ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const c } /* }}} */ +ZEND_API ZEND_COLD void zend_throw_error_unchecked(zend_class_entry *exception_ce, const char *format, ...) +{ + va_list va; + char *message = NULL; + + if (!exception_ce) { + exception_ce = zend_ce_error; + } + + /* Marker used to disable exception generation during preloading. */ + if (EG(exception) == (void*)(uintptr_t)-1) { + return; + } + + va_start(va, format); + zend_vspprintf(&message, 0, format, va); + + //TODO: we can't convert compile-time errors to exceptions yet??? + if (EG(current_execute_data) && !CG(in_compilation)) { + zend_throw_exception(exception_ce, message, 0); + } else { + zend_error_noreturn(E_ERROR, "%s", message); + } + + efree(message); + va_end(va); +} + /* type should be one of the BP_VAR_* constants, only special messages happen for isset/empty and unset */ ZEND_API ZEND_COLD void zend_illegal_container_offset(const zend_string *container, const zval *offset, int type) { diff --git a/Zend/zend.h b/Zend/zend.h index 0cf1faeb653fe..5ec92203c849a 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -391,6 +391,7 @@ ZEND_API ZEND_COLD void zend_error_zstr(int type, zend_string *message); ZEND_API ZEND_COLD void zend_error_zstr_at(int type, zend_string *filename, uint32_t lineno, zend_string *message); ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); +ZEND_API ZEND_COLD void zend_throw_error_unchecked(zend_class_entry *exception_ce, const char *format, ...); ZEND_API ZEND_COLD void zend_type_error(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2); ZEND_API ZEND_COLD void zend_argument_count_error(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2); ZEND_API ZEND_COLD void zend_value_error(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2); diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 2ad3f6b323d8f..a1eac2a5a184e 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2870,7 +2870,7 @@ static void zend_compile_class_ref(znode *result, zend_ast *name_ast, uint32_t f } /* }}} */ -static zend_result zend_try_compile_cv(znode *result, zend_ast *ast) /* {{{ */ +static zend_result zend_try_compile_cv(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ { zend_ast *name_ast = ast->child[0]; if (name_ast->kind == ZEND_AST_ZVAL) { @@ -2890,6 +2890,11 @@ static zend_result zend_try_compile_cv(znode *result, zend_ast *ast) /* {{{ */ result->op_type = IS_CV; result->u.op.var = lookup_cv(name); + // FIXME: Check whether the CV is guaranteed to be declared + if (type == BP_VAR_R || type == BP_VAR_RW) { + zend_emit_op(NULL, ZEND_CHECK_VAR, result, NULL); + } + if (UNEXPECTED(Z_TYPE_P(zv) != IS_STRING)) { zend_string_release_ex(name, 0); } @@ -2994,7 +2999,7 @@ static zend_op *zend_compile_simple_var(znode *result, zend_ast *ast, uint32_t t result->op_type = IS_TMP_VAR; } return opline; - } else if (zend_try_compile_cv(result, ast) == FAILURE) { + } else if (zend_try_compile_cv(result, ast, type) == FAILURE) { return zend_compile_simple_var_no_cv(result, ast, type, delayed); } return NULL; @@ -3420,7 +3425,7 @@ static void zend_compile_expr_with_potential_assign_to_self( /* $a[0] = $a should evaluate the right $a first */ znode cv_node; - if (zend_try_compile_cv(&cv_node, expr_ast) == FAILURE) { + if (zend_try_compile_cv(&cv_node, expr_ast, BP_VAR_R) == FAILURE) { zend_compile_simple_var_no_cv(expr_node, expr_ast, BP_VAR_R, 0); } else { zend_emit_op_tmp(expr_node, ZEND_QM_ASSIGN, &cv_node, NULL); @@ -3510,7 +3515,7 @@ static void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */ /* list($a, $b) = $a should evaluate the right $a first */ znode cv_node; - if (zend_try_compile_cv(&cv_node, expr_ast) == FAILURE) { + if (zend_try_compile_cv(&cv_node, expr_ast, BP_VAR_R) == FAILURE) { zend_compile_simple_var_no_cv(&expr_node, expr_ast, BP_VAR_R, 0); } else { zend_emit_op_tmp(&expr_node, ZEND_QM_ASSIGN, &cv_node, NULL); @@ -3825,7 +3830,7 @@ static uint32_t zend_compile_args( opcode = ZEND_SEND_VAR_EX; CG(active_op_array)->fn_flags |= ZEND_ACC_USES_THIS; break; - } else if (zend_try_compile_cv(&arg_node, arg) == SUCCESS) { + } else if (zend_try_compile_cv(&arg_node, arg, BP_VAR_FUNC_ARG) == SUCCESS) { opcode = ZEND_SEND_VAR_EX; break; } @@ -5423,7 +5428,7 @@ static void zend_compile_global_var(zend_ast *ast) /* {{{ */ // TODO(GLOBALS) Forbid "global $GLOBALS"? if (is_this_fetch(var_ast)) { zend_error_noreturn(E_COMPILE_ERROR, "Cannot use $this as global variable"); - } else if (zend_try_compile_cv(&result, var_ast) == SUCCESS) { + } else if (zend_try_compile_cv(&result, var_ast, BP_VAR_W) == SUCCESS) { zend_op *opline = zend_emit_op(NULL, ZEND_BIND_GLOBAL, &result, &name_node); opline->extended_value = zend_alloc_cache_slot(); } else { @@ -5549,7 +5554,7 @@ static void zend_compile_unset(zend_ast *ast) /* {{{ */ case ZEND_AST_VAR: if (is_this_fetch(var_ast)) { zend_error_noreturn(E_COMPILE_ERROR, "Cannot unset $this"); - } else if (zend_try_compile_cv(&var_node, var_ast) == SUCCESS) { + } else if (zend_try_compile_cv(&var_node, var_ast, BP_VAR_UNSET) == SUCCESS) { opline = zend_emit_op(NULL, ZEND_UNSET_CV, &var_node, NULL); } else { opline = zend_compile_simple_var_no_cv(NULL, var_ast, BP_VAR_UNSET, 0); @@ -6074,7 +6079,7 @@ static void zend_compile_foreach(zend_ast *ast) /* {{{ */ if (is_this_fetch(value_ast)) { zend_error_noreturn(E_COMPILE_ERROR, "Cannot re-assign $this"); } else if (value_ast->kind == ZEND_AST_VAR && - zend_try_compile_cv(&value_node, value_ast) == SUCCESS) { + zend_try_compile_cv(&value_node, value_ast, BP_VAR_W) == SUCCESS) { SET_NODE(opline->op2, &value_node); } else { opline->op2_type = IS_VAR; @@ -10664,7 +10669,7 @@ static void zend_compile_isset_or_empty(znode *result, zend_ast *ast) /* {{{ */ if (is_this_fetch(var_ast)) { opline = zend_emit_op(result, ZEND_ISSET_ISEMPTY_THIS, NULL, NULL); CG(active_op_array)->fn_flags |= ZEND_ACC_USES_THIS; - } else if (zend_try_compile_cv(&var_node, var_ast) == SUCCESS) { + } else if (zend_try_compile_cv(&var_node, var_ast, BP_VAR_IS) == SUCCESS) { opline = zend_emit_op(result, ZEND_ISSET_ISEMPTY_CV, &var_node, NULL); } else { opline = zend_compile_simple_var_no_cv(result, var_ast, BP_VAR_IS, 0); diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 89fbcf2cbd781..9029396c3a91a 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -348,9 +348,7 @@ static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_R(uint32_t var EXECUTE_D { zval *ret = EX_VAR(var); - if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) { - return zval_undefined_cv(var EXECUTE_DATA_CC); - } + ZEND_ASSERT(Z_TYPE_P(ret) != IS_UNDEF); return ret; } @@ -358,9 +356,7 @@ static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_R(uint32_t var EXE { zval *ret = EX_VAR(var); - if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) { - return zval_undefined_cv(var EXECUTE_DATA_CC); - } + ZEND_ASSERT(Z_TYPE_P(ret) != IS_UNDEF); ZVAL_DEREF(ret); return ret; } @@ -376,11 +372,7 @@ static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_RW(uint32_t var EXECUTE_ { zval *ret = EX_VAR(var); - if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) { - zval_undefined_cv(var EXECUTE_DATA_CC); - ZVAL_NULL(ret); - return ret; - } + ZEND_ASSERT(Z_TYPE_P(ret) != IS_UNDEF); return ret; } @@ -2045,6 +2037,7 @@ static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim, /* The string may be destroyed while throwing the notice. * Temporarily increase the refcount to detect this situation. */ GC_ADDREF(s); + // FIXME: Still needed? if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } @@ -3641,6 +3634,7 @@ static zend_never_inline zval* zend_fetch_static_property_address_ex(zend_proper name = Z_STR_P(varname); tmp_name = NULL; } else { + // FIXME: Still needed? if (op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(opline->op1.var EXECUTE_DATA_CC); } diff --git a/Zend/zend_types.h b/Zend/zend_types.h index 7676a1d42a5f4..e365848a54f1c 100644 --- a/Zend/zend_types.h +++ b/Zend/zend_types.h @@ -1488,6 +1488,8 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) { #define ZVAL_DEREF(z) do { \ if (UNEXPECTED(Z_ISREF_P(z))) { \ (z) = Z_REFVAL_P(z); \ + /* FIXME: Verify this is beneficial. */ \ + ZEND_ASSERT(Z_TYPE_P(z) != IS_UNDEF && Z_TYPE_P(z) != IS_REFERENCE); \ } \ } while (0) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 9317d1ff592f5..86b738f74baa8 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2669,6 +2669,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array): SEPARATE_ARRAY(object_ptr); if (OP2_TYPE == IS_UNUSED) { value = GET_OP_DATA_ZVAL_PTR_UNDEF(BP_VAR_R); + // FIXME: Still needed? if (OP_DATA_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -2742,6 +2743,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array): } value = GET_OP_DATA_ZVAL_PTR_UNDEF(BP_VAR_R); + // FIXME: Still needed? if (OP_DATA_TYPE == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (OP_DATA_TYPE & (IS_CV|IS_VAR)) { @@ -9214,8 +9216,9 @@ ZEND_VM_HANDLER(49, ZEND_CHECK_VAR, CV, UNUSED) if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + zend_string *cv = CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var)); + zend_throw_error_unchecked(NULL, "Undefined variable $%S", cv); + HANDLE_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index f7bec6f7198c8..b634b19762244 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -24737,6 +24737,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -24810,6 +24811,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D } value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CONST & (IS_CV|IS_VAR)) { @@ -24889,6 +24891,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -24962,6 +24965,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { @@ -25042,6 +25046,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -25115,6 +25120,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_VAR & (IS_CV|IS_VAR)) { @@ -25195,6 +25201,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -25268,6 +25275,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D } value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CV & (IS_CV|IS_VAR)) { @@ -27732,6 +27740,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -27805,6 +27814,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ } value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CONST & (IS_CV|IS_VAR)) { @@ -27884,6 +27894,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -27957,6 +27968,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { @@ -28037,6 +28049,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -28110,6 +28123,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_VAR & (IS_CV|IS_VAR)) { @@ -28190,6 +28204,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -28263,6 +28278,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ } value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CV & (IS_CV|IS_VAR)) { @@ -29316,6 +29332,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -29389,6 +29406,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ } value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CONST & (IS_CV|IS_VAR)) { @@ -29468,6 +29486,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -29541,6 +29560,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { @@ -29621,6 +29641,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -29694,6 +29715,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_VAR & (IS_CV|IS_VAR)) { @@ -29774,6 +29796,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -29847,6 +29870,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ } value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CV & (IS_CV|IS_VAR)) { @@ -32084,6 +32108,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -32157,6 +32182,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA } value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CONST & (IS_CV|IS_VAR)) { @@ -32236,6 +32262,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -32309,6 +32336,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { @@ -32389,6 +32417,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -32462,6 +32491,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_VAR & (IS_CV|IS_VAR)) { @@ -32542,6 +32572,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -32615,6 +32646,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA } value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CV & (IS_CV|IS_VAR)) { @@ -44048,6 +44080,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -44121,6 +44154,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA } value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CONST & (IS_CV|IS_VAR)) { @@ -44200,6 +44234,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -44273,6 +44308,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { @@ -44353,6 +44389,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -44426,6 +44463,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_VAR & (IS_CV|IS_VAR)) { @@ -44506,6 +44544,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -44579,6 +44618,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA } value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CV & (IS_CV|IS_VAR)) { @@ -48000,6 +48040,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -48073,6 +48114,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D } value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CONST & (IS_CV|IS_VAR)) { @@ -48152,6 +48194,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -48225,6 +48268,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { @@ -48305,6 +48349,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -48378,6 +48423,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_VAR & (IS_CV|IS_VAR)) { @@ -48458,6 +48504,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -48531,6 +48578,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D } value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CV & (IS_CV|IS_VAR)) { @@ -50042,6 +50090,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -50115,6 +50164,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D } value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CONST & (IS_CV|IS_VAR)) { @@ -50194,6 +50244,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -50267,6 +50318,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { @@ -50347,6 +50399,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -50420,6 +50473,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_VAR & (IS_CV|IS_VAR)) { @@ -50500,6 +50554,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -50573,6 +50628,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D } value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CV & (IS_CV|IS_VAR)) { @@ -51340,8 +51396,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDL if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + zend_string *cv = CV_DEF_OF(EX_VAR_TO_NUM(opline->op1.var)); + zend_throw_error_unchecked(NULL, "Undefined variable $%S", cv); + HANDLE_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } @@ -53498,6 +53555,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -53571,6 +53629,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ } value = RT_CONSTANT((opline+1), (opline+1)->op1); + // FIXME: Still needed? if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CONST & (IS_CV|IS_VAR)) { @@ -53650,6 +53709,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -53723,6 +53783,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { @@ -53803,6 +53864,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -53876,6 +53938,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + // FIXME: Still needed? if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_VAR & (IS_CV|IS_VAR)) { @@ -53956,6 +54019,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { HashTable *ht = Z_ARRVAL_P(object_ptr); if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { @@ -54029,6 +54093,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ } value = EX_VAR((opline+1)->op1.var); + // FIXME: Still needed? if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); } else if (IS_CV & (IS_CV|IS_VAR)) { From b51ae636fd8433da552f914d3563189c4a16ba00 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Fri, 11 Apr 2025 17:24:48 +0200 Subject: [PATCH 2/2] Remove now redundant checks in the VM --- Zend/zend_compile.c | 1 + Zend/zend_compile.h | 1 + Zend/zend_vm_def.h | 367 +------ Zend/zend_vm_execute.h | 2259 +++------------------------------------- 4 files changed, 141 insertions(+), 2487 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index a1eac2a5a184e..cbac518d57388 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -535,6 +535,7 @@ static zend_always_inline uint32_t get_temporary_variable(void) /* {{{ */ } /* }}} */ +// FIXME: Check all uses of lookup_cv() to see whether they need CHECK_VAR. static int lookup_cv(zend_string *name) /* {{{ */{ zend_op_array *op_array = CG(active_op_array); int i = 0; diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 4f7d158ba0f1c..0bebd86e2fe8c 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -434,6 +434,7 @@ static zend_always_inline uint32_t zend_visibility_to_set_visibility(uint32_t vi #define ZEND_SHORT_CIRCUITING_CHAIN_EMPTY 2 // Must not clash with ZEND_SHORT_CIRCUITING_CHAIN_MASK +// FIXME: Can we get rid of this? CHECK_VAR instruction should be inserted now instead. #define ZEND_JMP_NULL_BP_VAR_IS 4 char *zend_visibility_string(uint32_t fn_flags); diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 86b738f74baa8..706e1a46bc0a5 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -28,12 +28,6 @@ ZEND_VM_HELPER(zend_add_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } add_function(EX_VAR(opline->result.var), op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -87,12 +81,6 @@ ZEND_VM_HELPER(zend_sub_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } sub_function(EX_VAR(opline->result.var), op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -146,12 +134,6 @@ ZEND_VM_HELPER(zend_mul_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } mul_function(EX_VAR(opline->result.var), op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -232,12 +214,6 @@ ZEND_VM_HELPER(zend_mod_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } mod_function(EX_VAR(opline->result.var), op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -280,12 +256,6 @@ ZEND_VM_HELPER(zend_shift_left_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } shift_left_function(EX_VAR(opline->result.var), op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -322,12 +292,6 @@ ZEND_VM_HELPER(zend_shift_right_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } shift_right_function(EX_VAR(opline->result.var), op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -435,12 +399,6 @@ ZEND_VM_HANDLER(8, ZEND_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(NO_CONST_ } else { SAVE_OPLINE(); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - op1 = ZVAL_UNDEFINED_OP1(); - } - if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - op2 = ZVAL_UNDEFINED_OP2(); - } concat_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); @@ -498,12 +456,6 @@ ZEND_VM_HELPER(zend_is_equal_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } ret = zend_compare(op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -578,12 +530,6 @@ ZEND_VM_HELPER(zend_is_not_equal_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } ret = zend_compare(op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -658,12 +604,6 @@ ZEND_VM_HELPER(zend_is_smaller_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } ret = zend_compare(op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -723,12 +663,6 @@ ZEND_VM_HELPER(zend_is_smaller_or_equal_helper, ANY, ANY, zval *op_1, zval *op_2 USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } ret = zend_compare(op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -805,12 +739,6 @@ ZEND_VM_HELPER(zend_bw_or_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } bitwise_or_function(EX_VAR(opline->result.var), op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -844,12 +772,6 @@ ZEND_VM_HELPER(zend_bw_and_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } bitwise_and_function(EX_VAR(opline->result.var), op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -883,12 +805,6 @@ ZEND_VM_HELPER(zend_bw_xor_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } bitwise_xor_function(EX_VAR(opline->result.var), op_1, op_2); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -936,9 +852,6 @@ ZEND_VM_HELPER(zend_bw_not_helper, ANY, ANY, zval *op_1) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } bitwise_not_function(EX_VAR(opline->result.var), op_1); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -968,13 +881,7 @@ ZEND_VM_COLD_CONST_HANDLER(14, ZEND_BOOL_NOT, CONST|TMPVAR|CV, ANY) ZVAL_FALSE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ - const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_TRUE(EX_VAR(opline->result.var)); - if (OP1_TYPE == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val)); @@ -1030,10 +937,6 @@ ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, OP) object = Z_REFVAL_P(object); ZEND_VM_C_GOTO(assign_op_object); } - if (OP1_TYPE == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -1223,9 +1126,6 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array): } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { uint8_t old_type; - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } ht = zend_new_array(8); old_type = Z_TYPE_P(container); ZVAL_ARR(container, ht); @@ -1307,10 +1207,6 @@ ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACH object = Z_REFVAL_P(object); ZEND_VM_C_GOTO(pre_incdec_object); } - if (OP1_TYPE == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -1377,10 +1273,6 @@ ZEND_VM_HANDLER(134, ZEND_POST_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CAC object = Z_REFVAL_P(object); ZEND_VM_C_GOTO(post_incdec_object); } - if (OP1_TYPE == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -1499,10 +1391,6 @@ ZEND_VM_HELPER(zend_pre_inc_helper, VAR|CV, ANY) var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); SAVE_OPLINE(); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -1550,10 +1438,6 @@ ZEND_VM_HELPER(zend_pre_dec_helper, VAR|CV, ANY) var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); SAVE_OPLINE(); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -1602,10 +1486,6 @@ ZEND_VM_HELPER(zend_post_inc_helper, VAR|CV, ANY) var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); SAVE_OPLINE(); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -1650,10 +1530,6 @@ ZEND_VM_HELPER(zend_post_dec_helper, VAR|CV, ANY) var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); SAVE_OPLINE(); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -1709,8 +1585,6 @@ ZEND_VM_HANDLER(136, ZEND_ECHO, CONST|TMPVAR|CV, ANY) if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); - } else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } zend_string_release_ex(str, 0); } @@ -1736,9 +1610,6 @@ ZEND_VM_HELPER(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED, int type) name = Z_STR_P(varname); tmp_name = NULL; } else { - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } name = zval_try_get_tmp_string(varname, &tmp_name); if (UNEXPECTED(!name)) { if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) { @@ -2082,9 +1953,6 @@ ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST break; } } - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, GET_OP2_ZVAL_PTR(BP_VAR_R)); ZVAL_NULL(EX_VAR(opline->result.var)); ZEND_VM_C_GOTO(fetch_obj_r_finish); @@ -2289,9 +2157,6 @@ ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, C break; } } - if (OP2_TYPE == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); ZEND_VM_C_GOTO(fetch_obj_is_finish); } while (0); @@ -2669,18 +2534,6 @@ ZEND_VM_C_LABEL(try_assign_dim_array): SEPARATE_ARRAY(object_ptr); if (OP2_TYPE == IS_UNUSED) { value = GET_OP_DATA_ZVAL_PTR_UNDEF(BP_VAR_R); - // FIXME: Still needed? - if (OP_DATA_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - ZEND_VM_C_GOTO(assign_dim_error); - } - } if (OP_DATA_TYPE == IS_CV || OP_DATA_TYPE == IS_VAR) { ZVAL_DEREF(value); } @@ -2736,17 +2589,12 @@ ZEND_VM_C_LABEL(try_assign_dim_array): GC_ADDREF(obj); dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); - if (OP2_TYPE == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = GET_OP_DATA_ZVAL_PTR_UNDEF(BP_VAR_R); - // FIXME: Still needed? - if (OP_DATA_TYPE == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (OP_DATA_TYPE & (IS_CV|IS_VAR)) { + if (OP_DATA_TYPE & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -3117,13 +2965,6 @@ ZEND_VM_HOT_NOCONST_HANDLER(43, ZEND_JMPZ, CONST|TMPVAR|CV, JMP_ADDR) if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } @@ -3151,13 +2992,6 @@ ZEND_VM_HOT_NOCONST_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, JMP_ADDR) if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_NEXT_OPCODE(); } @@ -3187,13 +3021,6 @@ ZEND_VM_COLD_CONST_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, JMP_ADDR) ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } @@ -3223,13 +3050,7 @@ ZEND_VM_COLD_CONST_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, JMP_ADDR) ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } else { - ZEND_VM_NEXT_OPCODE(); - } + ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); @@ -3346,9 +3167,6 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMP } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } op1_str = zval_get_string_func(op1); } if (OP2_TYPE == IS_CONST) { @@ -3356,9 +3174,6 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMP } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { - if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } op2_str = zval_get_string_func(op2); } do { @@ -3428,9 +3243,6 @@ ZEND_VM_HANDLER(54, ZEND_ROPE_INIT, UNUSED, CONST|TMPVAR|CV, NUM) } } else { SAVE_OPLINE(); - if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[0] = zval_get_string_func(var); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -3463,9 +3275,6 @@ ZEND_VM_HANDLER(55, ZEND_ROPE_ADD, TMP, CONST|TMPVAR|CV, NUM) } } else { SAVE_OPLINE(); - if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[opline->extended_value] = zval_get_string_func(var); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -3498,9 +3307,6 @@ ZEND_VM_HANDLER(56, ZEND_ROPE_END, TMP, CONST|TMPVAR|CV, NUM) } } else { SAVE_OPLINE(); - if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[opline->extended_value] = zval_get_string_func(var); FREE_OP2(); if (UNEXPECTED(EG(exception))) { @@ -3563,12 +3369,6 @@ ZEND_VM_C_LABEL(try_class_name): class_name = Z_REFVAL_P(class_name); ZEND_VM_C_GOTO(try_class_name); } else { - if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Class name must be a valid object or a string"); } } @@ -3604,12 +3404,6 @@ ZEND_VM_HOT_OBJ_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - FREE_OP1(); - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); FREE_OP2(); @@ -3641,15 +3435,6 @@ ZEND_VM_HOT_OBJ_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, break; } } - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if (OP2_TYPE != IS_CONST) { - FREE_OP2(); - } - HANDLE_EXCEPTION(); - } - } if (OP2_TYPE == IS_CONST) { function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); } @@ -3784,11 +3569,6 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR, if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); FREE_OP2(); @@ -3913,12 +3693,6 @@ ZEND_VM_C_LABEL(try_function_name): function_name = Z_REFVAL_P(function_name); ZEND_VM_C_GOTO(try_function_name); } else { - if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - function_name = ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Value of type %s is not callable", zend_zval_type_name(function_name)); call = NULL; @@ -4455,17 +4229,6 @@ ZEND_VM_COLD_CONST_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV ZEND_VM_NEXT_OPCODE(); } - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { - SAVE_OPLINE(); - retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE(); - } - } - zend_reference *ref = NULL; if (UNEXPECTED(retval_ref != retval_ptr)) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { @@ -4509,13 +4272,7 @@ ZEND_VM_INLINE_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER)) retval_ptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); return_value = EX(return_value); ZEND_OBSERVER_SET_RETVAL(); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (OP1_TYPE & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); @@ -4784,12 +4541,6 @@ ZEND_VM_COLD_CONST_HANDLER(108, ZEND_THROW, CONST|TMPVAR|CV, ANY) break; } } - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Can only throw objects"); FREE_OP1(); HANDLE_EXCEPTION(); @@ -4951,12 +4702,6 @@ ZEND_VM_HOT_HANDLER(117, ZEND_SEND_VAR, VAR|CV, CONST|UNUSED|NUM) } varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (OP1_TYPE == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); @@ -5146,12 +4891,6 @@ ZEND_VM_C_LABEL(send_var_by_ref): } varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (OP1_TYPE == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); @@ -5460,9 +5199,6 @@ ZEND_VM_C_LABEL(send_again): args = Z_REFVAL_P(args); ZEND_VM_C_GOTO(send_again); } else { - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args)); } @@ -5842,13 +5578,7 @@ ZEND_VM_COLD_CONST_HANDLER(52, ZEND_BOOL, CONST|TMPVAR|CV, ANY) ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ - const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_FALSE(EX_VAR(opline->result.var)); - if (OP1_TYPE == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val)); @@ -5864,12 +5594,6 @@ ZEND_VM_HELPER(zend_case_helper, ANY, ANY, zval *op_1, zval *op_2) USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } ret = zend_compare(op_1, op_2); if (OP2_TYPE & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_2); @@ -6019,12 +5743,6 @@ ZEND_VM_COLD_CONST_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY) } } ZVAL_UNDEF(EX_VAR(opline->result.var)); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "__clone method called on non-object"); FREE_OP1(); HANDLE_EXCEPTION(); @@ -6283,10 +6001,6 @@ ZEND_VM_C_LABEL(num_index): zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); ZEND_VM_C_GOTO(num_index); - } else if (OP2_TYPE == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - ZEND_VM_C_GOTO(str_index); } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -6667,9 +6381,6 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH) name = Z_STR_P(varname); tmp_name = NULL; } else { - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { - varname = ZVAL_UNDEFINED_OP1(); - } name = zval_try_get_tmp_string(varname, &tmp_name); if (UNEXPECTED(!name)) { FREE_OP1(); @@ -6723,9 +6434,6 @@ ZEND_VM_COLD_HANDLER(179, ZEND_UNSET_STATIC_PROP, ANY, ANY, CACHE_SLOT) } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); } else { - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { - varname = ZVAL_UNDEFINED_OP1(); - } name = zval_try_get_tmp_string(varname, &tmp_name); if (UNEXPECTED(!name)) { FREE_OP1(); @@ -6793,10 +6501,6 @@ ZEND_VM_C_LABEL(num_index_dim): zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); ZEND_VM_C_GOTO(num_index_dim); - } else if (OP2_TYPE == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - key = ZSTR_EMPTY_ALLOC(); - ZEND_VM_C_GOTO(str_index_dim); } else { zend_illegal_array_offset_unset(offset); } @@ -6807,12 +6511,6 @@ ZEND_VM_C_LABEL(num_index_dim): ZEND_VM_C_GOTO(unset_dim_array); } } - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - container = ZVAL_UNDEFINED_OP1(); - } - if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { - offset = ZVAL_UNDEFINED_OP2(); - } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (OP2_TYPE == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; @@ -6848,10 +6546,6 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_S if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { - if (OP1_TYPE == IS_CV - && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } break; } } else { @@ -7859,16 +7553,6 @@ ZEND_VM_HOT_NOCONST_HANDLER(198, ZEND_JMP_NULL, CONST|TMP|VAR|CV, JMP_ADDR) uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK; if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) { ZVAL_NULL(result); - if (OP1_TYPE == IS_CV - && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF) - && (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0 - ) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } } else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) { ZVAL_FALSE(result); } else { @@ -7886,12 +7570,6 @@ ZEND_VM_HOT_HANDLER(31, ZEND_QM_ASSIGN, CONST|TMP|VAR|CV, ANY) zval *result = EX_VAR(opline->result.var); value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(result); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (OP1_TYPE == IS_CV) { ZVAL_COPY_DEREF(result, value); @@ -8071,9 +7749,6 @@ ZEND_VM_C_LABEL(try_instanceof): expr = Z_REFVAL_P(expr); ZEND_VM_C_GOTO(try_instanceof); } else { - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } result = 0; } FREE_OP1(); @@ -8745,9 +8420,6 @@ ZEND_VM_COLD_CONST_HANDLER(121, ZEND_STRLEN, CONST|TMPVAR|CV, ANY) } SAVE_OPLINE(); - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - value = ZVAL_UNDEFINED_OP1(); - } strict = EX_USES_STRICT_TYPES(); do { if (EXPECTED(!strict)) { @@ -8800,14 +8472,6 @@ ZEND_VM_C_LABEL(type_check_resource): if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { ZEND_VM_C_GOTO(type_check_resource); } - } else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - result = ((1 << IS_NULL) & opline->extended_value) != 0; - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - ZVAL_UNDEF(EX_VAR(opline->result.var)); - HANDLE_EXCEPTION(); - } } if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); @@ -9335,15 +8999,6 @@ ZEND_VM_C_LABEL(match_try_again): op = Z_REFVAL_P(op); ZEND_VM_C_GOTO(match_try_again); } else { - if (UNEXPECTED((OP1_TYPE & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) { - SAVE_OPLINE(); - op = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - ZEND_VM_C_GOTO(match_try_again); - } - ZEND_VM_C_GOTO(default_branch); } @@ -9402,17 +9057,8 @@ ZEND_VM_COLD_CONSTCONST_HANDLER(189, ZEND_IN_ARRAY, CONST|TMP|VAR|CV, CONST, NUM FREE_OP1(); ZEND_VM_SMART_BRANCH(result, 0); } - } else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } } else if (Z_TYPE_P(op1) <= IS_FALSE) { - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC()); ZEND_VM_SMART_BRANCH(result, 0); } else { @@ -9483,8 +9129,6 @@ ZEND_VM_COLD_CONST_HANDLER(190, ZEND_COUNT, CONST|TMPVAR|CV, UNUSED) } else if ((OP1_TYPE & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) { op1 = Z_REFVAL_P(op1); continue; - } else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } count = 0; zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1)); @@ -9541,9 +9185,6 @@ ZEND_VM_COLD_CONST_HANDLER(191, ZEND_GET_CLASS, UNUSED|CONST|TMPVAR|CV, UNUSED) op1 = Z_REFVAL_P(op1); continue; } else { - if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1)); ZVAL_UNDEF(EX_VAR(opline->result.var)); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index b634b19762244..169aeb7c3f7cd 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -449,12 +449,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_add_helper_S USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } add_function(EX_VAR(opline->result.var), op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -470,12 +464,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_sub_helper_S USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } sub_function(EX_VAR(opline->result.var), op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -491,12 +479,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mul_helper_S USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } mul_function(EX_VAR(opline->result.var), op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -522,12 +504,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mod_helper_S USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } mod_function(EX_VAR(opline->result.var), op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -543,12 +519,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_shift_left_h USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } shift_left_function(EX_VAR(opline->result.var), op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -564,12 +534,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_shift_right_ USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } shift_right_function(EX_VAR(opline->result.var), op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -586,12 +550,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_equal_hel USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } ret = zend_compare(op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -608,12 +566,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_not_equal USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } ret = zend_compare(op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -630,12 +582,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_smaller_h USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } ret = zend_compare(op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -652,12 +598,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_is_smaller_o USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } ret = zend_compare(op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -673,12 +613,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_or_helper USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } bitwise_or_function(EX_VAR(opline->result.var), op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -694,12 +628,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_and_helpe USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } bitwise_and_function(EX_VAR(opline->result.var), op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -715,12 +643,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_xor_helpe USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } bitwise_xor_function(EX_VAR(opline->result.var), op_1, op_2); if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_1); @@ -736,9 +658,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_bw_not_helpe USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } bitwise_not_function(EX_VAR(opline->result.var), op_1); FREE_OP(opline->op1_type, opline->op1.var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -2580,9 +2499,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_ args = Z_REFVAL_P(args); goto send_again; } else { - if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args)); } @@ -2782,12 +2698,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_case_helper_ USE_OPLINE SAVE_OPLINE(); - if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) { - op_1 = ZVAL_UNDEFINED_OP1(); - } - if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) { - op_2 = ZVAL_UNDEFINED_OP2(); - } ret = zend_compare(op_1, op_2); if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) { zval_ptr_dtor_nogc(op_2); @@ -2964,9 +2874,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); } else { - if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { - varname = ZVAL_UNDEFINED_OP1(); - } name = zval_try_get_tmp_string(varname, &tmp_name); if (UNEXPECTED(!name)) { FREE_OP(opline->op1_type, opline->op1.var); @@ -4037,12 +3944,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_H function_name = Z_REFVAL_P(function_name); goto try_function_name; } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - function_name = ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Value of type %s is not callable", zend_zval_type_name(function_name)); call = NULL; @@ -4220,12 +4121,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_ function_name = Z_REFVAL_P(function_name); goto try_function_name; } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - function_name = ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Value of type %s is not callable", zend_zval_type_name(function_name)); call = NULL; @@ -4416,12 +4311,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HAND function_name = Z_REFVAL_P(function_name); goto try_function_name; } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - function_name = ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Value of type %s is not callable", zend_zval_type_name(function_name)); call = NULL; @@ -4473,13 +4362,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CON ZVAL_FALSE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ - const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_TRUE(EX_VAR(opline->result.var)); - if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val)); @@ -4508,8 +4391,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_O if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } zend_string_release_ex(str, 0); } @@ -4528,13 +4409,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_H if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } @@ -4562,13 +4436,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_ if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_NEXT_OPCODE(); } @@ -4598,13 +4465,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONS ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } @@ -4634,13 +4494,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CON ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } else { - ZEND_VM_NEXT_OPCODE(); - } + ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); @@ -4665,13 +4519,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_ retval_ptr = RT_CONSTANT(opline, opline->op1); return_value = EX(return_value); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (IS_CONST & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); @@ -4743,13 +4591,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_OBSER retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R); return_value = EX(return_value); if (!return_value) { return_value = &observer_retval; }; - if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); @@ -5048,12 +4890,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_ break; } } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Can only throw objects"); HANDLE_EXCEPTION(); @@ -5149,13 +4985,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_H ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ - const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_FALSE(EX_VAR(opline->result.var)); - if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val)); @@ -5187,12 +5017,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_ } } ZVAL_UNDEF(EX_VAR(opline->result.var)); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "__clone method called on non-object"); HANDLE_EXCEPTION(); @@ -5769,16 +5593,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CON uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK; if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) { ZVAL_NULL(result); - if (IS_CONST == IS_CV - && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF) - && (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0 - ) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } } else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) { ZVAL_FALSE(result); } else { @@ -5796,12 +5610,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CON zval *result = EX_VAR(opline->result.var); value = RT_CONSTANT(opline, opline->op1); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(result); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_CONST == IS_CV) { ZVAL_COPY_DEREF(result, value); @@ -5988,9 +5796,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST } SAVE_OPLINE(); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - value = ZVAL_UNDEFINED_OP1(); - } strict = EX_USES_STRICT_TYPES(); do { if (EXPECTED(!strict)) { @@ -6043,14 +5848,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_C if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { goto type_check_resource; } - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - result = ((1 << IS_NULL) & opline->extended_value) != 0; - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - ZVAL_UNDEF(EX_VAR(opline->result.var)); - HANDLE_EXCEPTION(); - } } if (IS_CONST & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); @@ -6778,9 +6575,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_ break; } } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -6946,9 +6740,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC break; } } - if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -7145,9 +6936,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } op1_str = zval_get_string_func(op1); } if (IS_CONST == IS_CONST) { @@ -7155,9 +6943,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } op2_str = zval_get_string_func(op2); } do { @@ -7230,12 +7015,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_ if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -7267,15 +7046,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_ break; } } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if (IS_CONST != IS_CONST) { - - } - HANDLE_EXCEPTION(); - } - } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } @@ -7410,11 +7180,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -7832,10 +7597,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -8281,15 +8042,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_CONST_ op = Z_REFVAL_P(op); goto match_try_again; } else { - if (UNEXPECTED((IS_CONST & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) { - SAVE_OPLINE(); - op = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - goto match_try_again; - } - goto default_branch; } @@ -8337,17 +8089,8 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CON ZEND_VM_SMART_BRANCH(result, 0); } - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } } else if (Z_TYPE_P(op1) <= IS_FALSE) { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC()); ZEND_VM_SMART_BRANCH(result, 0); } else { @@ -9244,12 +8987,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDL } else { SAVE_OPLINE(); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - op1 = ZVAL_UNDEFINED_OP1(); - } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - op2 = ZVAL_UNDEFINED_OP2(); - } concat_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); @@ -9356,9 +9093,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_ break; } } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -9524,9 +9258,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -9723,9 +9454,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } op1_str = zval_get_string_func(op1); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { @@ -9733,9 +9461,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } op2_str = zval_get_string_func(op2); } do { @@ -9808,12 +9533,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_ if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); @@ -9845,15 +9564,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_ break; } } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { - zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); - } - HANDLE_EXCEPTION(); - } - } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); } @@ -9988,11 +9698,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); @@ -10219,10 +9924,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_T zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -10557,9 +10258,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_ad name = Z_STR_P(varname); tmp_name = NULL; } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } name = zval_try_get_tmp_string(varname, &tmp_name); if (UNEXPECTED(!name)) { if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) { @@ -10746,11 +10444,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -10857,17 +10550,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYP ZEND_VM_NEXT_OPCODE(); } - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { - SAVE_OPLINE(); - retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE(); - } - } - zend_reference *ref = NULL; if (UNEXPECTED(retval_ref != retval_ptr)) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { @@ -11143,10 +10825,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_U zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -11199,9 +10877,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HA name = Z_STR_P(varname); tmp_name = NULL; } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { - varname = ZVAL_UNDEFINED_OP1(); - } name = zval_try_get_tmp_string(varname, &tmp_name); if (UNEXPECTED(!name)) { @@ -11436,8 +11111,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_ } else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) { op1 = Z_REFVAL_P(op1); continue; - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } count = 0; zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1)); @@ -11479,9 +11152,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CO op1 = Z_REFVAL_P(op1); continue; } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1)); ZVAL_UNDEF(EX_VAR(opline->result.var)); } @@ -11735,12 +11405,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(Z } else { SAVE_OPLINE(); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - op1 = ZVAL_UNDEFINED_OP1(); - } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - op2 = ZVAL_UNDEFINED_OP2(); - } concat_function(EX_VAR(opline->result.var), op1, op2); @@ -11847,9 +11511,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_ break; } } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -12015,9 +11676,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC break; } } - if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -12214,9 +11872,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } op1_str = zval_get_string_func(op1); } if (IS_CV == IS_CONST) { @@ -12224,9 +11879,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } op2_str = zval_get_string_func(op2); } do { @@ -12299,12 +11951,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_ if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -12336,15 +11982,6 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_ break; } } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if (IS_CV != IS_CONST) { - - } - HANDLE_EXCEPTION(); - } - } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } @@ -12479,11 +12116,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -12709,10 +12341,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -13671,15 +13299,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_TMPVARCV_CONST_HAND op = Z_REFVAL_P(op); goto match_try_again; } else { - if (UNEXPECTED(((IS_TMP_VAR|IS_VAR|IS_CV) & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) { - SAVE_OPLINE(); - op = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - goto match_try_again; - } - goto default_branch; } @@ -15043,13 +14662,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(Z ZVAL_FALSE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ - const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_TRUE(EX_VAR(opline->result.var)); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val)); @@ -15078,8 +14691,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_ if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } zend_string_release_ex(str, 0); } @@ -15099,13 +14710,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_H if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } @@ -15133,13 +14737,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_ if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_NEXT_OPCODE(); } @@ -15169,13 +14766,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZE ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } @@ -15205,13 +14795,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(Z ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } else { - ZEND_VM_NEXT_OPCODE(); - } + ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); @@ -15277,12 +14861,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Can only throw objects"); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); HANDLE_EXCEPTION(); @@ -15307,13 +14885,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_ ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ - const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_FALSE(EX_VAR(opline->result.var)); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val)); @@ -15345,12 +14917,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND } } ZVAL_UNDEF(EX_VAR(opline->result.var)); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "__clone method called on non-object"); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); HANDLE_EXCEPTION(); @@ -15597,9 +15163,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEN } SAVE_OPLINE(); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - value = ZVAL_UNDEFINED_OP1(); - } strict = EX_USES_STRICT_TYPES(); do { if (EXPECTED(!strict)) { @@ -15652,14 +15215,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TM if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { goto type_check_resource; } - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - result = ((1 << IS_NULL) & opline->extended_value) != 0; - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - ZVAL_UNDEF(EX_VAR(opline->result.var)); - HANDLE_EXCEPTION(); - } } if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); @@ -15824,12 +15379,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDL } else { SAVE_OPLINE(); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - op1 = ZVAL_UNDEFINED_OP1(); - } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - op2 = ZVAL_UNDEFINED_OP2(); - } concat_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); @@ -16279,9 +15828,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_ break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -16447,9 +15993,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST break; } } - if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -16617,9 +16160,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } op1_str = zval_get_string_func(op1); } if (IS_CONST == IS_CONST) { @@ -16627,9 +16167,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } op2_str = zval_get_string_func(op2); } do { @@ -16702,12 +16239,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -16739,15 +16270,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if (IS_CONST != IS_CONST) { - - } - HANDLE_EXCEPTION(); - } - } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } @@ -17106,9 +16628,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_H expr = Z_REFVAL_P(expr); goto try_instanceof; } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } result = 0; } zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); @@ -17317,12 +16836,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HAND } else { SAVE_OPLINE(); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - op1 = ZVAL_UNDEFINED_OP1(); - } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - op2 = ZVAL_UNDEFINED_OP2(); - } concat_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); @@ -17772,9 +17285,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -17940,9 +17450,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVA break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -18110,9 +17617,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } op1_str = zval_get_string_func(op1); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { @@ -18120,9 +17624,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } op2_str = zval_get_string_func(op2); } do { @@ -18195,12 +17696,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); @@ -18232,15 +17727,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { - zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); - } - HANDLE_EXCEPTION(); - } - } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); } @@ -18572,9 +18058,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HAN expr = Z_REFVAL_P(expr); goto try_instanceof; } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } result = 0; } zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); @@ -18598,9 +18081,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_ad name = Z_STR_P(varname); tmp_name = NULL; } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } name = zval_try_get_tmp_string(varname, &tmp_name); if (UNEXPECTED(!name)) { if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) { @@ -18761,9 +18241,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_H name = Z_STR_P(varname); tmp_name = NULL; } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { - varname = ZVAL_UNDEFINED_OP1(); - } name = zval_try_get_tmp_string(varname, &tmp_name); if (UNEXPECTED(!name)) { zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); @@ -18863,9 +18340,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_ expr = Z_REFVAL_P(expr); goto try_instanceof; } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } result = 0; } zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); @@ -18914,8 +18388,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDL } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) { op1 = Z_REFVAL_P(op1); continue; - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } count = 0; zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1)); @@ -18972,9 +18444,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_H op1 = Z_REFVAL_P(op1); continue; } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1)); ZVAL_UNDEF(EX_VAR(opline->result.var)); } @@ -19086,12 +18555,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER( } else { SAVE_OPLINE(); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - op1 = ZVAL_UNDEFINED_OP1(); - } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - op2 = ZVAL_UNDEFINED_OP2(); - } concat_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); @@ -19179,9 +18642,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HAN break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -19347,9 +18807,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HA break; } } - if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -19517,9 +18974,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } op1_str = zval_get_string_func(op1); } if (IS_CV == IS_CONST) { @@ -19527,9 +18981,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } op2_str = zval_get_string_func(op2); } do { @@ -19602,12 +19053,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -19639,15 +19084,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if (IS_CV != IS_CONST) { - - } - HANDLE_EXCEPTION(); - } - } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } @@ -19951,13 +19387,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HA retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC); return_value = EX(return_value); - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); @@ -20538,16 +19968,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMP_ uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK; if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) { ZVAL_NULL(result); - if (IS_TMP_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF) - && (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0 - ) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } } else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) { ZVAL_FALSE(result); } else { @@ -20565,12 +19985,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP zval *result = EX_VAR(opline->result.var); value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC); - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(result); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_TMP_VAR == IS_CV) { ZVAL_COPY_DEREF(result, value); @@ -20700,9 +20114,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLE } } else { SAVE_OPLINE(); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[opline->extended_value] = zval_get_string_func(var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -20735,9 +20146,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLE } } else { SAVE_OPLINE(); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[opline->extended_value] = zval_get_string_func(var); if (UNEXPECTED(EG(exception))) { @@ -20886,10 +20294,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CON zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -21078,17 +20482,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLE zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); ZEND_VM_SMART_BRANCH(result, 0); } - } else if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } } else if (Z_TYPE_P(op1) <= IS_FALSE) { - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC()); ZEND_VM_SMART_BRANCH(result, 0); } else { @@ -21177,9 +20572,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDL } } else { SAVE_OPLINE(); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[opline->extended_value] = zval_get_string_func(var); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -21212,9 +20604,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDL } } else { SAVE_OPLINE(); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[opline->extended_value] = zval_get_string_func(var); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); if (UNEXPECTED(EG(exception))) { @@ -21326,10 +20715,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -21593,17 +20978,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UN ZEND_VM_NEXT_OPCODE(); } - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { - SAVE_OPLINE(); - retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE(); - } - } - zend_reference *ref = NULL; if (UNEXPECTED(retval_ref != retval_ptr)) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { @@ -21782,10 +21156,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNU zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -22033,9 +21403,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(Z } } else { SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[opline->extended_value] = zval_get_string_func(var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -22068,9 +21435,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(Z } } else { SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[opline->extended_value] = zval_get_string_func(var); if (UNEXPECTED(EG(exception))) { @@ -22182,10 +21546,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_ zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -22381,10 +21741,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_help var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC); SAVE_OPLINE(); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -22450,10 +21806,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_help var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC); SAVE_OPLINE(); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -22520,10 +21872,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_hel var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC); SAVE_OPLINE(); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -22568,10 +21916,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_hel var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC); SAVE_OPLINE(); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -22617,13 +21961,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HA retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); return_value = EX(return_value); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (IS_VAR & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); @@ -23478,16 +22816,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_VAR_ uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK; if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) { ZVAL_NULL(result); - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF) - && (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0 - ) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } } else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) { ZVAL_FALSE(result); } else { @@ -23505,12 +22833,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR zval *result = EX_VAR(opline->result.var); value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(result); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_VAR == IS_CV) { ZVAL_COPY_DEREF(result, value); @@ -23622,10 +22944,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_H object = Z_REFVAL_P(object); goto assign_op_object; } - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -23760,9 +23078,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_H } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { uint8_t old_type; - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } ht = zend_new_array(8); old_type = Z_TYPE_P(container); ZVAL_ARR(container, ht); @@ -23842,10 +23157,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HAN object = Z_REFVAL_P(object); goto pre_incdec_object; } - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -23906,10 +23217,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HA object = Z_REFVAL_P(object); goto post_incdec_object; } - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -24737,18 +24044,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -24804,17 +24099,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D GC_ADDREF(obj); dim = RT_CONSTANT(opline, opline->op2); - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CONST & (IS_CV|IS_VAR)) { + if (IS_CONST & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -24891,18 +24181,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -24958,17 +24236,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D GC_ADDREF(obj); dim = RT_CONSTANT(opline, opline->op2); - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { + if (IS_TMP_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -25046,18 +24319,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -25113,17 +24374,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D GC_ADDREF(obj); dim = RT_CONSTANT(opline, opline->op2); - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_VAR & (IS_CV|IS_VAR)) { + if (IS_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -25201,18 +24457,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -25268,17 +24512,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D GC_ADDREF(obj); dim = RT_CONSTANT(opline, opline->op2); - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CV & (IS_CV|IS_VAR)) { + if (IS_CV & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -25522,11 +24761,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -25622,12 +24856,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_ } varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_VAR == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); @@ -25817,12 +25045,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HAN } varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_VAR == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); @@ -26101,10 +25323,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CON zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -26193,10 +25411,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDL zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; - } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - key = ZSTR_EMPTY_ALLOC(); - goto str_index_dim; } else { zend_illegal_array_offset_unset(offset); } @@ -26207,12 +25421,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDL goto unset_dim_array; } } - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - container = ZVAL_UNDEFINED_OP1(); - } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { - offset = ZVAL_UNDEFINED_OP2(); - } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; @@ -26247,10 +25455,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDL if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } break; } } else { @@ -26428,17 +25632,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLE zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); ZEND_VM_SMART_BRANCH(result, 0); } - } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } } else if (Z_TYPE_P(op1) <= IS_FALSE) { - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC()); ZEND_VM_SMART_BRANCH(result, 0); } else { @@ -26620,10 +25815,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_ object = Z_REFVAL_P(object); goto assign_op_object; } - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -26758,9 +25949,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_ } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { uint8_t old_type; - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } ht = zend_new_array(8); old_type = Z_TYPE_P(container); ZVAL_ARR(container, ht); @@ -26842,10 +26030,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HA object = Z_REFVAL_P(object); goto pre_incdec_object; } - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -26907,10 +26091,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_H object = Z_REFVAL_P(object); goto post_incdec_object; } - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -27740,18 +26920,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -27807,17 +26975,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ GC_ADDREF(obj); dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CONST & (IS_CV|IS_VAR)) { + if (IS_CONST & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -27894,18 +27057,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -27961,17 +27112,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ GC_ADDREF(obj); dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { + if (IS_TMP_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -28049,18 +27195,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -28116,17 +27250,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ GC_ADDREF(obj); dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_VAR & (IS_CV|IS_VAR)) { + if (IS_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -28204,18 +27333,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -28271,17 +27388,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ GC_ADDREF(obj); dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CV & (IS_CV|IS_VAR)) { + if (IS_CV & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -28467,11 +27579,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); @@ -28626,10 +27733,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -28718,10 +27821,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HAND zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - key = ZSTR_EMPTY_ALLOC(); - goto str_index_dim; } else { zend_illegal_array_offset_unset(offset); } @@ -28732,12 +27831,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HAND goto unset_dim_array; } } - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - container = ZVAL_UNDEFINED_OP1(); - } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { - offset = ZVAL_UNDEFINED_OP2(); - } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; @@ -28773,10 +27866,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HAND if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } break; } } else { @@ -29236,9 +28325,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_ } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { uint8_t old_type; - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } ht = zend_new_array(8); old_type = Z_TYPE_P(container); ZVAL_ARR(container, ht); @@ -29332,18 +28418,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -29399,17 +28473,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ GC_ADDREF(obj); dim = NULL; - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CONST & (IS_CV|IS_VAR)) { + if (IS_CONST & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -29486,18 +28555,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -29553,17 +28610,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ GC_ADDREF(obj); dim = NULL; - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { + if (IS_TMP_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -29641,18 +28693,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -29708,17 +28748,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ GC_ADDREF(obj); dim = NULL; - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_VAR & (IS_CV|IS_VAR)) { + if (IS_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -29796,18 +28831,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -29863,17 +28886,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ GC_ADDREF(obj); dim = NULL; - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CV & (IS_CV|IS_VAR)) { + if (IS_CV & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -29985,11 +29003,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -30096,17 +29109,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UN ZEND_VM_NEXT_OPCODE(); } - if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { - SAVE_OPLINE(); - retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE(); - } - } - zend_reference *ref = NULL; if (UNEXPECTED(retval_ref != retval_ptr)) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { @@ -30152,12 +29154,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_ } varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_VAR == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); @@ -30415,79 +29411,67 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HA } varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { + + if (IS_VAR == IS_CV) { + ZVAL_COPY_DEREF(arg, varptr); + } else /* if (IS_VAR == IS_VAR) */ { + if (UNEXPECTED(Z_ISREF_P(varptr))) { + zend_refcounted *ref = Z_COUNTED_P(varptr); + + varptr = Z_REFVAL_P(varptr); + ZVAL_COPY_VALUE(arg, varptr); + if (UNEXPECTED(GC_DELREF(ref) == 0)) { + efree_size(ref, sizeof(zend_reference)); + } else if (Z_OPT_REFCOUNTED_P(arg)) { + Z_ADDREF_P(arg); + } + } else { + ZVAL_COPY_VALUE(arg, varptr); + } + } + + ZEND_VM_NEXT_OPCODE(); +} + +static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS) +{ + USE_OPLINE + zval *varptr, *arg; + uint32_t arg_num; + + if (IS_UNUSED == IS_CONST) { SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } - - if (IS_VAR == IS_CV) { - ZVAL_COPY_DEREF(arg, varptr); - } else /* if (IS_VAR == IS_VAR) */ { - if (UNEXPECTED(Z_ISREF_P(varptr))) { - zend_refcounted *ref = Z_COUNTED_P(varptr); - - varptr = Z_REFVAL_P(varptr); - ZVAL_COPY_VALUE(arg, varptr); - if (UNEXPECTED(GC_DELREF(ref) == 0)) { - efree_size(ref, sizeof(zend_reference)); - } else if (Z_OPT_REFCOUNTED_P(arg)) { - Z_ADDREF_P(arg); - } - } else { - ZVAL_COPY_VALUE(arg, varptr); - } - } - - ZEND_VM_NEXT_OPCODE(); -} - -static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - zval *varptr, *arg; - uint32_t arg_num; - - if (IS_UNUSED == IS_CONST) { - SAVE_OPLINE(); - zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); - arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num)); - if (UNEXPECTED(!arg)) { - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - HANDLE_EXCEPTION(); - } - } else { - arg = ZEND_CALL_VAR(EX(call), opline->result.var); - arg_num = opline->op2.num; - } - - if (EXPECTED(1)) { - if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { - goto send_var_by_ref; - } - } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { -send_var_by_ref: - varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC); - if (Z_ISREF_P(varptr)) { - Z_ADDREF_P(varptr); - } else { - ZVAL_MAKE_REF_EX(varptr, 2); - } - ZVAL_REF(arg, Z_REF_P(varptr)); - - zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); - ZEND_VM_NEXT_OPCODE(); - } - - varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); + zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); + arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num)); + if (UNEXPECTED(!arg)) { + zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); + HANDLE_EXCEPTION(); + } + } else { + arg = ZEND_CALL_VAR(EX(call), opline->result.var); + arg_num = opline->op2.num; + } + + if (EXPECTED(1)) { + if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { + goto send_var_by_ref; + } + } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { +send_var_by_ref: + varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC); + if (Z_ISREF_P(varptr)) { + Z_ADDREF_P(varptr); + } else { + ZVAL_MAKE_REF_EX(varptr, 2); + } + ZVAL_REF(arg, Z_REF_P(varptr)); + + zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); + ZEND_VM_NEXT_OPCODE(); } + varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); + if (IS_VAR == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); } else /* if (IS_VAR == IS_VAR) */ { @@ -30707,10 +29691,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNU zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -30993,10 +29973,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HAND object = Z_REFVAL_P(object); goto assign_op_object; } - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -31131,9 +30107,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HAND } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { uint8_t old_type; - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } ht = zend_new_array(8); old_type = Z_TYPE_P(container); ZVAL_ARR(container, ht); @@ -31213,10 +30186,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLE object = Z_REFVAL_P(object); goto pre_incdec_object; } - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -31277,10 +30246,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDL object = Z_REFVAL_P(object); goto post_incdec_object; } - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -32108,18 +31073,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -32175,17 +31128,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA GC_ADDREF(obj); dim = EX_VAR(opline->op2.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CONST & (IS_CV|IS_VAR)) { + if (IS_CONST & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -32262,18 +31210,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -32329,17 +31265,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA GC_ADDREF(obj); dim = EX_VAR(opline->op2.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { + if (IS_TMP_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -32417,18 +31348,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -32484,17 +31403,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA GC_ADDREF(obj); dim = EX_VAR(opline->op2.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_VAR & (IS_CV|IS_VAR)) { + if (IS_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -32572,18 +31486,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -32639,17 +31541,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA GC_ADDREF(obj); dim = EX_VAR(opline->op2.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CV & (IS_CV|IS_VAR)) { + if (IS_CV & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -32931,11 +31828,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -33090,10 +31982,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_ zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -33182,10 +32070,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER( zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; - } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - key = ZSTR_EMPTY_ALLOC(); - goto str_index_dim; } else { zend_illegal_array_offset_unset(offset); } @@ -33196,12 +32080,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER( goto unset_dim_array; } } - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - container = ZVAL_UNDEFINED_OP1(); - } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { - offset = ZVAL_UNDEFINED_OP2(); - } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; @@ -33236,10 +32114,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER( if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { - if (IS_VAR == IS_CV - && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } break; } } else { @@ -33542,12 +32416,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND } } ZVAL_UNDEF(EX_VAR(opline->result.var)); - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "__clone method called on non-object"); HANDLE_EXCEPTION(); @@ -33670,10 +32538,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONS object = Z_REFVAL_P(object); goto assign_op_object; } - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -33760,10 +32624,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_ object = Z_REFVAL_P(object); goto pre_incdec_object; } - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -33824,10 +32684,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST object = Z_REFVAL_P(object); goto post_incdec_object; } - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -33882,9 +32738,6 @@ static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R break; } } - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -34093,9 +32946,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST break; } } - if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -34942,9 +33792,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HA } } else { SAVE_OPLINE(); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[0] = zval_get_string_func(var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -34982,12 +33829,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_ class_name = Z_REFVAL_P(class_name); goto try_class_name; } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Class name must be a valid object or a string"); } } @@ -35022,12 +33863,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_S if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -35059,15 +33894,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_S break; } } - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if (IS_CONST != IS_CONST) { - - } - HANDLE_EXCEPTION(); - } - } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } @@ -35202,11 +34028,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -35495,10 +34316,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HA if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } break; } } else { @@ -35845,10 +34662,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPV object = Z_REFVAL_P(object); goto assign_op_object; } - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -35935,10 +34748,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR object = Z_REFVAL_P(object); goto pre_incdec_object; } - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -36000,10 +34809,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVA object = Z_REFVAL_P(object); goto post_incdec_object; } - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -36059,9 +34864,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR break; } } - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -36265,9 +35067,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVA break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -37114,9 +35913,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_H } } else { SAVE_OPLINE(); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[0] = zval_get_string_func(var); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -37154,12 +35950,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR class_name = Z_REFVAL_P(class_name); goto try_class_name; } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Class name must be a valid object or a string"); } } @@ -37195,12 +35985,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); @@ -37232,15 +36016,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T break; } } - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { - zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); - } - HANDLE_EXCEPTION(); - } - } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); } @@ -37375,11 +36150,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); @@ -37493,10 +36263,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_H if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } break; } } else { @@ -37721,12 +36487,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED class_name = Z_REFVAL_P(class_name); goto try_class_name; } else { - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Class name must be a valid object or a string"); } } @@ -37786,11 +36546,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -37897,17 +36652,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED ZEND_VM_NEXT_OPCODE(); } - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { - SAVE_OPLINE(); - retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE(); - } - } - zend_reference *ref = NULL; if (UNEXPECTED(retval_ref != retval_ptr)) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { @@ -38293,9 +37037,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_H op1 = Z_REFVAL_P(op1); continue; } else { - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1)); ZVAL_UNDEF(EX_VAR(opline->result.var)); } @@ -38492,10 +37233,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_H object = Z_REFVAL_P(object); goto assign_op_object; } - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -38582,10 +37319,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HAN object = Z_REFVAL_P(object); goto pre_incdec_object; } - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -38646,10 +37379,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HA object = Z_REFVAL_P(object); goto post_incdec_object; } - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -38704,9 +37433,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN break; } } - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -38910,9 +37636,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HA break; } } - if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -39759,9 +38482,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDL } } else { SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } rope[0] = zval_get_string_func(var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); @@ -39799,12 +38519,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HAN class_name = Z_REFVAL_P(class_name); goto try_class_name; } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Class name must be a valid object or a string"); } } @@ -39839,12 +38553,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -39876,15 +38584,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C break; } } - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if (IS_CV != IS_CONST) { - - } - HANDLE_EXCEPTION(); - } - } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } @@ -40019,11 +38718,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -40137,10 +38831,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDL if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { - if (IS_UNUSED == IS_CV - && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } break; } } else { @@ -40344,13 +39034,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_ ZVAL_FALSE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ - const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_TRUE(EX_VAR(opline->result.var)); - if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val)); @@ -40368,10 +39052,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_help var_ptr = EX_VAR(opline->op1.var); SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -40436,10 +39116,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_help var_ptr = EX_VAR(opline->op1.var); SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -40505,10 +39181,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_hel var_ptr = EX_VAR(opline->op1.var); SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -40552,10 +39224,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_hel var_ptr = EX_VAR(opline->op1.var); SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(var_ptr); - } do { if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) { @@ -40610,8 +39278,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCO if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } zend_string_release_ex(str, 0); } @@ -40630,13 +39296,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDL if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } @@ -40664,13 +39323,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HAND if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_NEXT_OPCODE(); } @@ -40700,13 +39352,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_O ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } @@ -40736,13 +39381,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_ ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } else { - ZEND_VM_NEXT_OPCODE(); - } + ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); @@ -40767,13 +39406,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HAN retval_ptr = EX_VAR(opline->op1.var); return_value = EX(return_value); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (IS_CV & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); @@ -40959,12 +39592,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPC break; } } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "Can only throw objects"); HANDLE_EXCEPTION(); @@ -41009,13 +39636,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCO ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ - const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_FALSE(EX_VAR(opline->result.var)); - if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val)); @@ -41047,12 +39668,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC } } ZVAL_UNDEF(EX_VAR(opline->result.var)); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } zend_throw_error(NULL, "__clone method called on non-object"); HANDLE_EXCEPTION(); @@ -41546,16 +40161,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CV_H uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK; if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) { ZVAL_NULL(result); - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF) - && (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0 - ) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } } else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) { ZVAL_FALSE(result); } else { @@ -41573,12 +40178,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_ zval *result = EX_VAR(opline->result.var); value = EX_VAR(opline->op1.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(result); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(result, value); @@ -41729,9 +40328,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OP } SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - value = ZVAL_UNDEFINED_OP1(); - } strict = EX_USES_STRICT_TYPES(); do { if (EXPECTED(!strict)) { @@ -41784,14 +40380,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { goto type_check_resource; } - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - result = ((1 << IS_NULL) & opline->extended_value) != 0; - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - ZVAL_UNDEF(EX_VAR(opline->result.var)); - HANDLE_EXCEPTION(); - } } if (IS_CV & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); @@ -42201,12 +40789,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(Z } else { SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - op1 = ZVAL_UNDEFINED_OP1(); - } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - op2 = ZVAL_UNDEFINED_OP2(); - } concat_function(EX_VAR(opline->result.var), op1, op2); @@ -42645,10 +41227,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HA object = Z_REFVAL_P(object); goto assign_op_object; } - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -42783,9 +41361,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HA } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { uint8_t old_type; - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } ht = zend_new_array(8); old_type = Z_TYPE_P(container); ZVAL_ARR(container, ht); @@ -42865,10 +41440,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HAND object = Z_REFVAL_P(object); goto pre_incdec_object; } - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -42929,10 +41500,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HAN object = Z_REFVAL_P(object); goto post_incdec_object; } - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -43099,9 +41666,6 @@ static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R break; } } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -43310,9 +41874,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HAN break; } } - if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -44080,18 +42641,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -44147,17 +42696,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA GC_ADDREF(obj); dim = RT_CONSTANT(opline, opline->op2); - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CONST & (IS_CV|IS_VAR)) { + if (IS_CONST & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -44234,18 +42778,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -44301,17 +42833,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA GC_ADDREF(obj); dim = RT_CONSTANT(opline, opline->op2); - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { + if (IS_TMP_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -44389,18 +42916,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -44456,17 +42971,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA GC_ADDREF(obj); dim = RT_CONSTANT(opline, opline->op2); - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_VAR & (IS_CV|IS_VAR)) { + if (IS_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -44544,18 +43054,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -44611,17 +43109,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA GC_ADDREF(obj); dim = RT_CONSTANT(opline, opline->op2); - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CV & (IS_CV|IS_VAR)) { + if (IS_CV & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -44878,9 +43371,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } op1_str = zval_get_string_func(op1); } if (IS_CONST == IS_CONST) { @@ -44888,9 +43378,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } op2_str = zval_get_string_func(op2); } do { @@ -44963,12 +43450,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_S if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -45000,15 +43481,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_S break; } } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if (IS_CONST != IS_CONST) { - - } - HANDLE_EXCEPTION(); - } - } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } @@ -45110,12 +43582,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_C } varptr = EX_VAR(opline->op1.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); @@ -45204,12 +43670,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_CONST_HAND } varptr = EX_VAR(opline->op1.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); @@ -45310,10 +43770,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONS zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -45402,10 +43858,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLE zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; - } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - key = ZSTR_EMPTY_ALLOC(); - goto str_index_dim; } else { zend_illegal_array_offset_unset(offset); } @@ -45416,12 +43868,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLE goto unset_dim_array; } } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - container = ZVAL_UNDEFINED_OP1(); - } - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { - offset = ZVAL_UNDEFINED_OP2(); - } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; @@ -45456,10 +43902,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLE if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } break; } } else { @@ -45681,9 +44123,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDL expr = Z_REFVAL_P(expr); goto try_instanceof; } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } result = 0; } @@ -45922,17 +44361,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER ZEND_VM_SMART_BRANCH(result, 0); } - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } } else if (Z_TYPE_P(op1) <= IS_FALSE) { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - HANDLE_EXCEPTION(); - } - } result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC()); ZEND_VM_SMART_BRANCH(result, 0); } else { @@ -46192,12 +44622,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER( } else { SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - op1 = ZVAL_UNDEFINED_OP1(); - } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - op2 = ZVAL_UNDEFINED_OP2(); - } concat_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); @@ -46606,10 +45030,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_H object = Z_REFVAL_P(object); goto assign_op_object; } - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -46744,9 +45164,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_H } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { uint8_t old_type; - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } ht = zend_new_array(8); old_type = Z_TYPE_P(container); ZVAL_ARR(container, ht); @@ -46828,10 +45245,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HAN object = Z_REFVAL_P(object); goto pre_incdec_object; } - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -46893,10 +45306,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HA object = Z_REFVAL_P(object); goto post_incdec_object; } - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -47064,9 +45473,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN break; } } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -47270,9 +45676,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HA break; } } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -48040,18 +46443,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -48107,17 +46498,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D GC_ADDREF(obj); dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CONST & (IS_CV|IS_VAR)) { + if (IS_CONST & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -48194,18 +46580,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -48261,17 +46635,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D GC_ADDREF(obj); dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { + if (IS_TMP_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -48349,18 +46718,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -48416,17 +46773,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D GC_ADDREF(obj); dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_VAR & (IS_CV|IS_VAR)) { + if (IS_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -48504,18 +46856,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -48571,17 +46911,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D GC_ADDREF(obj); dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CV & (IS_CV|IS_VAR)) { + if (IS_CV & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -48780,9 +47115,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } op1_str = zval_get_string_func(op1); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { @@ -48790,9 +47122,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } op2_str = zval_get_string_func(op2); } do { @@ -48865,12 +47194,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); @@ -48902,15 +47225,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA break; } } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { - zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); - } - HANDLE_EXCEPTION(); - } - } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC); } @@ -49071,10 +47385,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPV zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -49163,10 +47473,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDL zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; - } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - key = ZSTR_EMPTY_ALLOC(); - goto str_index_dim; } else { zend_illegal_array_offset_unset(offset); } @@ -49177,12 +47483,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDL goto unset_dim_array; } } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - container = ZVAL_UNDEFINED_OP1(); - } - if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { - offset = ZVAL_UNDEFINED_OP2(); - } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; @@ -49218,10 +47518,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDL if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } break; } } else { @@ -49780,9 +48076,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER expr = Z_REFVAL_P(expr); goto try_instanceof; } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } result = 0; } @@ -49859,9 +48152,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_H } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { uint8_t old_type; - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } ht = zend_new_array(8); old_type = Z_TYPE_P(container); ZVAL_ARR(container, ht); @@ -49906,9 +48196,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_ad name = Z_STR_P(varname); tmp_name = NULL; } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } name = zval_try_get_tmp_string(varname, &tmp_name); if (UNEXPECTED(!name)) { if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) { @@ -50090,18 +48377,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -50157,17 +48432,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D GC_ADDREF(obj); dim = NULL; - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CONST & (IS_CV|IS_VAR)) { + if (IS_CONST & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -50244,18 +48514,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -50311,17 +48569,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D GC_ADDREF(obj); dim = NULL; - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { + if (IS_TMP_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -50399,18 +48652,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -50466,17 +48707,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D GC_ADDREF(obj); dim = NULL; - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_VAR & (IS_CV|IS_VAR)) { + if (IS_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -50554,18 +48790,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -50621,17 +48845,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D GC_ADDREF(obj); dim = NULL; - if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CV & (IS_CV|IS_VAR)) { + if (IS_CV & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -50721,17 +48940,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNU ZEND_VM_NEXT_OPCODE(); } - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) { - SAVE_OPLINE(); - retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception))) { - HANDLE_EXCEPTION(); - } - if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) { - ZEND_VM_NEXT_OPCODE(); - } - } - zend_reference *ref = NULL; if (UNEXPECTED(retval_ref != retval_ptr)) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { @@ -50777,12 +48985,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_U } varptr = EX_VAR(opline->op1.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); @@ -50871,12 +49073,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HAN } varptr = EX_VAR(opline->op1.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); @@ -50936,12 +49132,6 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_C } varptr = EX_VAR(opline->op1.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { - SAVE_OPLINE(); - ZVAL_UNDEFINED_OP1(); - ZVAL_NULL(arg); - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); @@ -51042,10 +49232,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUS zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -51116,9 +49302,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDL name = Z_STR_P(varname); tmp_name = NULL; } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { - varname = ZVAL_UNDEFINED_OP1(); - } name = zval_try_get_tmp_string(varname, &tmp_name); if (UNEXPECTED(!name)) { @@ -51261,9 +49444,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HAND expr = Z_REFVAL_P(expr); goto try_instanceof; } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } result = 0; } @@ -51478,8 +49658,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(Z } else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) { op1 = Z_REFVAL_P(op1); continue; - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); } count = 0; zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1)); @@ -51536,9 +49714,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDL op1 = Z_REFVAL_P(op1); continue; } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1)); ZVAL_UNDEF(EX_VAR(opline->result.var)); } @@ -51681,12 +49856,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND } else { SAVE_OPLINE(); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - op1 = ZVAL_UNDEFINED_OP1(); - } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - op2 = ZVAL_UNDEFINED_OP2(); - } concat_function(EX_VAR(opline->result.var), op1, op2); @@ -52125,10 +50294,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDL object = Z_REFVAL_P(object); goto assign_op_object; } - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -52263,9 +50428,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDL } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { uint8_t old_type; - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } ht = zend_new_array(8); old_type = Z_TYPE_P(container); ZVAL_ARR(container, ht); @@ -52345,10 +50507,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER object = Z_REFVAL_P(object); goto pre_incdec_object; } - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -52409,10 +50567,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLE object = Z_REFVAL_P(object); goto post_incdec_object; } - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC); break; } @@ -52579,9 +50733,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER break; } } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_r_finish; @@ -52785,9 +50936,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLE break; } } - if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - } ZVAL_NULL(EX_VAR(opline->result.var)); goto fetch_obj_is_finish; } while (0); @@ -53555,18 +51703,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -53622,17 +51758,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ GC_ADDREF(obj); dim = EX_VAR(opline->op2.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = RT_CONSTANT((opline+1), (opline+1)->op1); - // FIXME: Still needed? - if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CONST & (IS_CV|IS_VAR)) { + if (IS_CONST & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -53709,18 +51840,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -53776,17 +51895,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ GC_ADDREF(obj); dim = EX_VAR(opline->op2.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_TMP_VAR & (IS_CV|IS_VAR)) { + if (IS_TMP_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -53864,18 +51978,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -53931,17 +52033,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ GC_ADDREF(obj); dim = EX_VAR(opline->op2.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); - // FIXME: Still needed? - if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_VAR & (IS_CV|IS_VAR)) { + if (IS_VAR & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -54019,18 +52116,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { - HashTable *ht = Z_ARRVAL_P(object_ptr); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { - GC_ADDREF(ht); - } - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { - zend_array_destroy(ht); - goto assign_dim_error; - } - } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -54086,17 +52171,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ GC_ADDREF(obj); dim = EX_VAR(opline->op2.var); - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) { - dim = ZVAL_UNDEFINED_OP2(); - } else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { + if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } value = EX_VAR((opline+1)->op1.var); - // FIXME: Still needed? - if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) { - value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); - } else if (IS_CV & (IS_CV|IS_VAR)) { + if (IS_CV & (IS_CV|IS_VAR)) { ZVAL_DEREF(value); } @@ -54391,9 +52471,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } op1_str = zval_get_string_func(op1); } if (IS_CV == IS_CONST) { @@ -54401,9 +52478,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - } op2_str = zval_get_string_func(op2); } do { @@ -54476,12 +52550,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } - } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP2(); - if (UNEXPECTED(EG(exception) != NULL)) { - - HANDLE_EXCEPTION(); - } } zend_throw_error(NULL, "Method name must be a string"); @@ -54513,15 +52581,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA break; } } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { - object = ZVAL_UNDEFINED_OP1(); - if (UNEXPECTED(EG(exception) != NULL)) { - if (IS_CV != IS_CONST) { - - } - HANDLE_EXCEPTION(); - } - } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } @@ -54682,10 +52741,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_H zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index; - } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - str = ZSTR_EMPTY_ALLOC(); - goto str_index; } else { zend_illegal_array_offset_access(offset); zval_ptr_dtor_nogc(expr_ptr); @@ -54774,10 +52829,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(Z zend_use_resource_as_offset(offset); hval = Z_RES_HANDLE_P(offset); goto num_index_dim; - } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { - ZVAL_UNDEFINED_OP2(); - key = ZSTR_EMPTY_ALLOC(); - goto str_index_dim; } else { zend_illegal_array_offset_unset(offset); } @@ -54788,12 +52839,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(Z goto unset_dim_array; } } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - container = ZVAL_UNDEFINED_OP1(); - } - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { - offset = ZVAL_UNDEFINED_OP2(); - } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; @@ -54828,10 +52873,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(Z if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { - if (IS_CV == IS_CV - && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { - ZVAL_UNDEFINED_OP1(); - } break; } } else { @@ -59275,13 +57316,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) retval_ptr = RT_CONSTANT(opline, opline->op1); return_value = EX(return_value); - if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (IS_CONST & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); @@ -59355,13 +57390,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R); return_value = EX(return_value); if (!return_value) { return_value = &observer_retval; }; - if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); @@ -61269,13 +59298,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC); return_value = EX(return_value); - if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); @@ -61633,13 +59656,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC); return_value = EX(return_value); - if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (IS_VAR & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE(); @@ -63047,13 +61064,7 @@ ZEND_API void execute_ex(zend_execute_data *ex) retval_ptr = EX_VAR(opline->op1.var); return_value = EX(return_value); - if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { - SAVE_OPLINE(); - retval_ptr = ZVAL_UNDEFINED_OP1(); - if (return_value) { - ZVAL_NULL(return_value); - } - } else if (!return_value) { + if (!return_value) { if (IS_CV & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) { SAVE_OPLINE();