Skip to content

Commit 5bd7305

Browse files
committed
Merge branch 'PHP-8.0'
* PHP-8.0: Provide unused retvals to observers
2 parents c4b2a40 + 58d41b8 commit 5bd7305

16 files changed

+555
-47
lines changed

Zend/zend_vm_def.h

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4239,9 +4239,11 @@ ZEND_VM_INLINE_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER))
42394239
USE_OPLINE
42404240
zval *retval_ptr;
42414241
zval *return_value;
4242+
ZEND_OBSERVER_USE_RETVAL;
42424243

42434244
retval_ptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
42444245
return_value = EX(return_value);
4246+
ZEND_OBSERVER_SET_RETVAL();
42454247
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
42464248
SAVE_OPLINE();
42474249
retval_ptr = ZVAL_UNDEFINED_OP1();
@@ -4305,32 +4307,37 @@ ZEND_VM_INLINE_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER))
43054307
}
43064308
ZEND_OBSERVER_SAVE_OPLINE();
43074309
ZEND_OBSERVER_FCALL_END(execute_data, return_value);
4310+
ZEND_OBSERVER_FREE_RETVAL();
43084311
ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
43094312
}
43104313

43114314
ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC, SPEC(OBSERVER))
43124315
{
43134316
USE_OPLINE
43144317
zval *retval_ptr;
4318+
zval *return_value;
4319+
ZEND_OBSERVER_USE_RETVAL;
43154320

43164321
SAVE_OPLINE();
43174322

4323+
return_value = EX(return_value);
4324+
ZEND_OBSERVER_SET_RETVAL();
43184325
do {
43194326
if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR)) ||
43204327
(OP1_TYPE == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
43214328
/* Not supposed to happen, but we'll allow it */
43224329
zend_error(E_NOTICE, "Only variable references should be returned by reference");
43234330

43244331
retval_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
4325-
if (!EX(return_value)) {
4332+
if (!return_value) {
43264333
FREE_OP1();
43274334
} else {
43284335
if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4329-
ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
4336+
ZVAL_COPY_VALUE(return_value, retval_ptr);
43304337
break;
43314338
}
43324339

4333-
ZVAL_NEW_REF(EX(return_value), retval_ptr);
4340+
ZVAL_NEW_REF(return_value, retval_ptr);
43344341
if (OP1_TYPE == IS_CONST) {
43354342
Z_TRY_ADDREF_P(retval_ptr);
43364343
}
@@ -4344,28 +4351,29 @@ ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC,
43444351
ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
43454352
if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
43464353
zend_error(E_NOTICE, "Only variable references should be returned by reference");
4347-
if (EX(return_value)) {
4348-
ZVAL_NEW_REF(EX(return_value), retval_ptr);
4354+
if (return_value) {
4355+
ZVAL_NEW_REF(return_value, retval_ptr);
43494356
} else {
43504357
FREE_OP1_VAR_PTR();
43514358
}
43524359
break;
43534360
}
43544361
}
43554362

4356-
if (EX(return_value)) {
4363+
if (return_value) {
43574364
if (Z_ISREF_P(retval_ptr)) {
43584365
Z_ADDREF_P(retval_ptr);
43594366
} else {
43604367
ZVAL_MAKE_REF_EX(retval_ptr, 2);
43614368
}
4362-
ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
4369+
ZVAL_REF(return_value, Z_REF_P(retval_ptr));
43634370
}
43644371

43654372
FREE_OP1_VAR_PTR();
43664373
} while (0);
43674374

4368-
ZEND_OBSERVER_FCALL_END(execute_data, EX(return_value));
4375+
ZEND_OBSERVER_FCALL_END(execute_data, return_value);
4376+
ZEND_OBSERVER_FREE_RETVAL();
43694377
ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
43704378
}
43714379

@@ -7710,7 +7718,7 @@ ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_ca
77107718

77117719
/* Uncaught exception */
77127720
if (zend_observer_fcall_op_array_extension != -1) {
7713-
zend_observer_fcall_end(execute_data, EX(return_value));
7721+
zend_observer_fcall_end(execute_data, NULL);
77147722
}
77157723
cleanup_live_vars(execute_data, op_num, 0);
77167724
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {

0 commit comments

Comments
 (0)