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/