From ce29cb297e0d8c312edbe7c0eefd89fb5da319a4 Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Thu, 19 Jul 2001 15:53:38 +0000 Subject: [PATCH] Catch all cases --- Zend/zend_compile.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 1ed37be15b..0933444be0 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1041,14 +1041,16 @@ void zend_do_return(znode *expr, int do_end_vparse CLS_DC) { zend_op *opline; - if (CG(active_op_array)->return_reference) { - if (!do_end_vparse) { - zend_error(E_COMPILE_ERROR, "Only variables may be returned by reference"); + if (do_end_vparse) { + if (CG(active_op_array)->return_reference) { + zend_do_end_variable_parse(BP_VAR_W, 0 CLS_CC); + } else { + zend_do_end_variable_parse(BP_VAR_R, 0 CLS_CC); } - zend_do_end_variable_parse(BP_VAR_W, 0 CLS_CC); - } else { - zend_do_end_variable_parse(BP_VAR_R, 0 CLS_CC); + } else if (expr && CG(active_op_array)->return_reference) { + zend_error(E_COMPILE_ERROR, "Only variables may be returned by reference"); } + #ifdef ZTS zend_stack_apply_with_argument(&CG(switch_cond_stack), ZEND_STACK_APPLY_TOPDOWN, (int (*)(void *element, void *)) generate_free_switch_expr CLS_CC); zend_stack_apply_with_argument(&CG(foreach_copy_stack), ZEND_STACK_APPLY_TOPDOWN, (int (*)(void *element, void *)) generate_free_foreach_copy CLS_CC); -- 2.50.1