Re: Safe Temporary Cleanup on Exception (Variable Liveness)
| From: | Nikita Popov | Date: | Tue, 10 Nov 2015 10:42:15 +0000 |
| Subject: | Re: Safe Temporary Cleanup on Exception (Variable Liveness) | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-89146@lists.php.net to get a copy of this message | ||
On Tue, Nov 10, 2015 at 10:53 AM, Dmitry Stogov <dmitry@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.
Nikita