]> granicus.if.org Git - php/commitdiff
- If a function's return value is unused then don't create a ZEND_FREE
authorAndi Gutmans <andi@php.net>
Wed, 17 Nov 1999 17:21:15 +0000 (17:21 +0000)
committerAndi Gutmans <andi@php.net>
Wed, 17 Nov 1999 17:21:15 +0000 (17:21 +0000)
  opcode but free it after the function call in zend_execute.

Zend/zend_compile.c
Zend/zend_execute.c

index 9955453190aa24cee57cca18fb3135ee525945a6..c5483d19ee244c68d2d03d36a17d6159d4a5a164 100644 (file)
@@ -623,15 +623,16 @@ void do_free(znode *op1 CLS_DC)
 {
        if (op1->op_type==IS_TMP_VAR) {
                zend_op *last_opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
-               zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
 
                if ((last_opline->opcode == ZEND_DO_FCALL) || (last_opline->opcode == ZEND_DO_FCALL_BY_NAME)) {
                        last_opline->result.u.EA.type |= EXT_TYPE_UNUSED;
-               }
+               } else {
+                       zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
 
-               opline->opcode = ZEND_FREE;
-               opline->op1 = *op1;
-               SET_UNUSED(opline->op2);
+                       opline->opcode = ZEND_FREE;
+                       opline->op1 = *op1;
+                       SET_UNUSED(opline->op2);
+               }
        } else if (op1->op_type==IS_VAR) {
                zend_op *opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
 
index a580c76c13d4f99d53986e40f2d28ef0f2387a0d..b4baddcb7cc0f4e003e78f558fa63cd637b5f644 100644 (file)
@@ -1472,6 +1472,9 @@ do_fcall_common:
                                                if (object.ptr) {
                                                        object.ptr->refcount--;
                                                }
+                                               if (opline->result.u.EA.type & EXT_TYPE_UNUSED) {
+                                                       zendi_zval_dtor(Ts[opline->result.u.var].tmp_var);
+                                               }
                                        } else if (function_state.function->type==ZEND_USER_FUNCTION) {
                                                HashTable *calling_symbol_table;