]> granicus.if.org Git - php/commitdiff
Remove live-range if the corresponding definition is deleted
authorDmitry Stogov <dmitry@zend.com>
Wed, 23 Dec 2015 00:46:40 +0000 (03:46 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 23 Dec 2015 00:46:40 +0000 (03:46 +0300)
ext/opcache/Optimizer/block_pass.c

index 4b6ef50d86864bfa01cc9fdde8083c1864b24366..5f3707a21811a08fa282eb9493bcdfd486446e05 100644 (file)
@@ -253,6 +253,10 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
                                            src->opcode != ZEND_FETCH_STATIC_PROP_R &&
                                            src->opcode != ZEND_FETCH_DIM_R &&
                                            src->opcode != ZEND_FETCH_OBJ_R) {
+                                               if (opline->extended_value & ZEND_FREE_ON_RETURN) {
+                                                       /* mark as removed (empty live range) */
+                                                       op_array->live_range[opline->op2.num].var = (uint32_t)-1;
+                                               }
                                                ZEND_RESULT_TYPE(src) |= EXT_TYPE_UNUSED;
                                                MAKE_NOP(opline);
                                        }