summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2017-04-09 15:35:44 +0200
committerNikita Popov <nikita.ppv@gmail.com>2017-04-09 15:35:44 +0200
commit515e1e0ceabb56c55775719e304bcb9c9731ca60 (patch)
tree87ae2ef68a9074fb4b37d2b2bd9bb992ec786d8f
parent84ef6fa80dbfc1ff8942209b13d9fb5439409729 (diff)
parent744c4a5592ab3e8a733d68fbfe8913081fb6c1bc (diff)
downloadphp-git-515e1e0ceabb56c55775719e304bcb9c9731ca60.tar.gz
Merge branch 'PHP-7.0' into PHP-7.1
-rw-r--r--NEWS2
-rw-r--r--Zend/tests/bug74188.phpt14
-rw-r--r--Zend/zend_vm_def.h39
-rw-r--r--Zend/zend_vm_execute.h327
4 files changed, 254 insertions, 128 deletions
diff --git a/NEWS b/NEWS
index b8a4112abb..575bca59d0 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,8 @@ PHP NEWS
(Laruence)
. Fixed bug #74340 (Magic function __get has different behavior in php 7.1.x).
(Nikita)
+ . Fixed bug #74188 (Null coalescing operator fails for undeclared static
+ class properties). (tpunt)
- GD:
. Fixed bug #74343 (compile fails on solaris 11 with system gd2 library).
diff --git a/Zend/tests/bug74188.phpt b/Zend/tests/bug74188.phpt
new file mode 100644
index 0000000000..3eb4facdd9
--- /dev/null
+++ b/Zend/tests/bug74188.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Fixes bug 74188 (undeclared static variables emit a warning with ?? operator)
+--FILE--
+<?php
+abstract class Test
+{
+ public static function get()
+ {
+ static::$a ?? true;
+ }
+}
+Test::get();
+?>
+--EXPECT--
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 64dcdb623c..9a633780b1 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -1692,9 +1692,13 @@ ZEND_VM_HELPER(zend_fetch_static_prop_helper, CONST|TMPVAR|CV, UNUSED|CONST|VAR,
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- FREE_OP1();
- HANDLE_EXCEPTION();
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ FREE_OP1();
+ HANDLE_EXCEPTION();
+ }
}
ZEND_VM_C_GOTO(fetch_static_prop_return);
@@ -1729,24 +1733,31 @@ ZEND_VM_HELPER(zend_fetch_static_prop_helper, CONST|TMPVAR|CV, UNUSED|CONST|VAR,
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- FREE_OP1();
- HANDLE_EXCEPTION();
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ FREE_OP1();
+ HANDLE_EXCEPTION();
+ }
}
ZEND_VM_C_GOTO(fetch_static_prop_return);
}
}
- retval = zend_std_get_static_property(ce, name, 0);
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (OP1_TYPE != IS_CONST) {
- zend_string_release(name);
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ ZEND_ASSERT(EG(exception));
+ if (OP1_TYPE != IS_CONST) {
+ zend_string_release(name);
+ }
+ FREE_OP1();
+ HANDLE_EXCEPTION();
}
- FREE_OP1();
- HANDLE_EXCEPTION();
- }
- if (OP1_TYPE == IS_CONST && retval) {
+ } else if (OP1_TYPE == IS_CONST) {
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 2bf932b47e..bb4f50a431 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -4869,9 +4869,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
@@ -4906,24 +4910,31 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
}
}
- retval = zend_std_get_static_property(ce, name, 0);
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ ZEND_ASSERT(EG(exception));
+ if (IS_CONST != IS_CONST) {
+ zend_string_release(name);
+ }
- HANDLE_EXCEPTION();
- }
- if (IS_CONST == IS_CONST && retval) {
+ HANDLE_EXCEPTION();
+ }
+ } else if (IS_CONST == IS_CONST) {
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
@@ -6722,9 +6733,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
@@ -6759,24 +6774,31 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
}
}
- retval = zend_std_get_static_property(ce, name, 0);
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ ZEND_ASSERT(EG(exception));
+ if (IS_CONST != IS_CONST) {
+ zend_string_release(name);
+ }
- HANDLE_EXCEPTION();
- }
- if (IS_CONST == IS_CONST && retval) {
+ HANDLE_EXCEPTION();
+ }
+ } else if (IS_CONST == IS_CONST) {
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
@@ -7294,9 +7316,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
@@ -7331,24 +7357,31 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
}
}
- retval = zend_std_get_static_property(ce, name, 0);
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ ZEND_ASSERT(EG(exception));
+ if (IS_CONST != IS_CONST) {
+ zend_string_release(name);
+ }
- HANDLE_EXCEPTION();
- }
- if (IS_CONST == IS_CONST && retval) {
+ HANDLE_EXCEPTION();
+ }
+ } else if (IS_CONST == IS_CONST) {
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
@@ -37942,9 +37975,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
@@ -37979,24 +38016,31 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
}
}
- retval = zend_std_get_static_property(ce, name, 0);
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ ZEND_ASSERT(EG(exception));
+ if (IS_CV != IS_CONST) {
+ zend_string_release(name);
+ }
- HANDLE_EXCEPTION();
- }
- if (IS_CV == IS_CONST && retval) {
+ HANDLE_EXCEPTION();
+ }
+ } else if (IS_CV == IS_CONST) {
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
@@ -41005,9 +41049,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
@@ -41042,24 +41090,31 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
}
}
- retval = zend_std_get_static_property(ce, name, 0);
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ ZEND_ASSERT(EG(exception));
+ if (IS_CV != IS_CONST) {
+ zend_string_release(name);
+ }
- HANDLE_EXCEPTION();
- }
- if (IS_CV == IS_CONST && retval) {
+ HANDLE_EXCEPTION();
+ }
+ } else if (IS_CV == IS_CONST) {
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
@@ -42053,9 +42108,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
@@ -42090,24 +42149,31 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- HANDLE_EXCEPTION();
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
}
}
- retval = zend_std_get_static_property(ce, name, 0);
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ ZEND_ASSERT(EG(exception));
+ if (IS_CV != IS_CONST) {
+ zend_string_release(name);
+ }
- HANDLE_EXCEPTION();
- }
- if (IS_CV == IS_CONST && retval) {
+ HANDLE_EXCEPTION();
+ }
+ } else if (IS_CV == IS_CONST) {
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
@@ -52412,9 +52478,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ zval_ptr_dtor_nogc(free_op1);
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
@@ -52449,24 +52519,31 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ zval_ptr_dtor_nogc(free_op1);
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
}
}
- retval = zend_std_get_static_property(ce, name, 0);
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ ZEND_ASSERT(EG(exception));
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_string_release(name);
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ HANDLE_EXCEPTION();
}
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST && retval) {
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
@@ -53361,9 +53438,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ zval_ptr_dtor_nogc(free_op1);
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
@@ -53398,24 +53479,31 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ zval_ptr_dtor_nogc(free_op1);
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
}
}
- retval = zend_std_get_static_property(ce, name, 0);
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ ZEND_ASSERT(EG(exception));
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_string_release(name);
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ HANDLE_EXCEPTION();
}
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST && retval) {
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
@@ -53849,9 +53937,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ zval_ptr_dtor_nogc(free_op1);
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
@@ -53886,24 +53978,31 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ zval_ptr_dtor_nogc(free_op1);
+ HANDLE_EXCEPTION();
+ }
}
goto fetch_static_prop_return;
}
}
- retval = zend_std_get_static_property(ce, name, 0);
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
+ if (type == BP_VAR_IS) {
+ retval = &EG(uninitialized_zval);
+ } else {
+ ZEND_ASSERT(EG(exception));
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_string_release(name);
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ HANDLE_EXCEPTION();
}
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST && retval) {
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}