<https://gist.github.com/dstogov/43eaa3f3b68583877322>It looks like the last version of the patch https://github.com/php/php-src/pull/1634 solves all the problems (except for reported by Nikita "unknown liveness in finally" - Zend/tests/temporary_cleaning_010.phpt).
Please, analyse the patch and try to craft a script not covered by the patch. If nobody object and no problems found, I'll commit this on Friday. Thanks. Dmitry. On Tue, Nov 10, 2015 at 10:28 PM, Dmitry Stogov <dmi...@zend.com> wrote: > I've committed unrelated and obvious parts (without semantic changes). > The updated and extended patch now is much more clean > https://gist.github.com/dstogov/43eaa3f3b68583877322 > Anyway, it's still incomplete. > > Thanks. Dmitry. > > On Tue, Nov 10, 2015 at 2: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. >> >> Thanks. Dmitry, >> >> >> >>> >>> Nikita >>> >>> >> >