Hi

On 8/5/24 18:06, Levi Morrison wrote:
After thinking about this several times over the course of discussion
and again now that it's in voting, I have decided to vote no. I am in
favor of this change, I just think given the concerns it's best to
wait for PHP 9.0 to do it. Maybe the concerns with control flow can be
improved by better inference/marking of functions which are
`noreturn`, at least for known functions (of which `\exit` definitely
would be).

As I've just explained in my response to Derick within the discussion thread related to this RFC: The information is already there, it just needs to be used.

For a test I've just added the following code snippet to `zend_compile_call()`:

    zend_type return_type = fbc->common.arg_info[-1].type;
    if (ZEND_TYPE_CONTAINS_CODE(return_type, IS_NEVER)) {
        printf("%s has return type never\n", ZSTR_VAL(lcname));
    } else {
        printf("%s doesn't have return type never\n", ZSTR_VAL(lcname));
    }

and then I executed the following test script:

    <?php

    namespace Foo;

    function a() {
        \strrev('foo');
        exit(new \stdClass());
    }

    try {
        a();
    } catch (\Throwable) {}
    echo "executed", PHP_EOL;

when running this script, I receive the following output:

    strrev doesn't have return type never
    exit has return type never
    executed

Best regards
Tim Düsterhus

Reply via email to