@@ -4355,8 +4355,8 @@ ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC)
4355
4355
retval_ptr = GET_OP1_ZVAL_PTR_PTR (BP_VAR_W );
4356
4356
4357
4357
if (OP1_TYPE == IS_VAR ) {
4358
- if (retval_ptr == & EG (uninitialized_zval ) ||
4359
- (opline -> extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P (retval_ptr ) )) {
4358
+ ZEND_ASSERT (retval_ptr != & EG (uninitialized_zval ));
4359
+ if (opline -> extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P (retval_ptr )) {
4360
4360
zend_error (E_NOTICE , "Only variable references should be returned by reference" );
4361
4361
if (EX (return_value )) {
4362
4362
ZVAL_NEW_REF (EX (return_value ), retval_ptr );
@@ -7621,20 +7621,23 @@ ZEND_VM_HANDLER(160, ZEND_YIELD, CONST|TMP|VAR|CV|UNUSED, CONST|TMP|VAR|CV|UNUSE
7621
7621
7622
7622
/* If a function call result is yielded and the function did
7623
7623
* not return by reference we throw a notice. */
7624
- if (OP1_TYPE == IS_VAR &&
7625
- (value_ptr == & EG (uninitialized_zval ) ||
7626
- (opline -> extended_value == ZEND_RETURNS_FUNCTION &&
7627
- !Z_ISREF_P (value_ptr )))) {
7628
- zend_error (E_NOTICE , "Only variable references should be yielded by reference" );
7629
- ZVAL_COPY (& generator -> value , value_ptr );
7630
- } else {
7624
+ do {
7625
+ if (OP1_TYPE == IS_VAR ) {
7626
+ ZEND_ASSERT (value_ptr != & EG (uninitialized_zval ));
7627
+ if (opline -> extended_value == ZEND_RETURNS_FUNCTION
7628
+ && !Z_ISREF_P (value_ptr )) {
7629
+ zend_error (E_NOTICE , "Only variable references should be yielded by reference" );
7630
+ ZVAL_COPY (& generator -> value , value_ptr );
7631
+ break ;
7632
+ }
7633
+ }
7631
7634
if (Z_ISREF_P (value_ptr )) {
7632
7635
Z_ADDREF_P (value_ptr );
7633
7636
} else {
7634
7637
ZVAL_MAKE_REF_EX (value_ptr , 2 );
7635
7638
}
7636
7639
ZVAL_REF (& generator -> value , Z_REF_P (value_ptr ));
7637
- }
7640
+ } while ( 0 );
7638
7641
7639
7642
FREE_OP1_VAR_PTR ();
7640
7643
}
0 commit comments