Hey:

On Tue, Nov 10, 2015 at 7:29 PM, Dmitry Stogov <dmi...@zend.com> wrote:

>
>
> On Tue, Nov 10, 2015 at 1:42 PM, Nikita Popov <nikita....@gmail.com>
> wrote:
>
>> On Tue, Nov 10, 2015 at 10:53 AM, Dmitry Stogov <dmi...@zend.com> wrote:
>>
>>> Hi,
>>>
>>> Please take a look into
>>> https://gist.github.com/dstogov/43eaa3f3b68583877322
>>>
>>> This is variation on Bob's idea about variable liveness.
>>> The patch is incomplete. Liveness construction is still naive. However,
>>> all tests are passed.
>>>
>>> Ranges are represented by start/end/variable cartages. (I suppose this
>>> representation is more compact, than in the original proposal).
>>> In general, it's possible to use few ranges for the same variable, if
>>> its whole live range is not linear. (this is not implemented yet).
>>>
>>> Related ideas and tests are welcome.
>>>
>>> Thanks. Dmitry.
>>>
>>
>> One leak this does not cover yet is a discarded delayed return value:
>>
>> function test() {
>>     try {
>>         $a = [1, 2, 3];
>>         return $a + [];
>>     } finally {
>>         throw new Exception;
>>     }
>> }
>>
>> try {
>>     test();
>> } catch (Exception $e) {}
>>
>> This case is a bit tricky because it violates the usual invariant that
>> all temporaries have well-defined liveness ranges (either alive or not, no
>> maybe). We'd have to change that first.
>>
>
> I see the problem. We can't statically define live-ranges for finally
> code, because we don't know where it's going to be called from.
> May be we may reconstruct this at run-time.
>
Or maybe we could separate ZEND_RETURN(_BY_REF) into two parts

the first part, set the return value to EX(return_value),  the second part
do the really leave(leave_helper).

thus, we can keep the liveness of the variable won't be intrruptted?

like:  previously we emit:   ZEND_ADD, ZEND_FAST_CALL, ZEND_RETURN.

        now we emit: ZEND_ADD,  ZEND_RETURN, ZEND_FAST_CALL, ZEND_RETURN

        then in HANDLE_EXCEPTION we can dtor EX(return_value) if it is
already set?

this could also fixed double return memory leak
like Zend/tests/try/bug70228.phpt

thanks

>
> Thanks. Dmitry,
>
>
>
>>
>> Nikita
>>
>>
>


-- 
Xinchen Hui
@Laruence
http://www.laruence.com/

Reply via email to