On Monday, 10 July 2017 at 18:50:54 UTC, Steven Schveighoffer wrote:
On 7/10/17 2:38 PM, Walter Bright wrote:
On 7/10/2017 4:00 AM, Steven Schveighoffer wrote:
But I have to ask, what is the benefit of statically determining that a function is noreturn?

It is useful anywhere dataflow analysis is useful.

    FunctionThatDoesnotReturn();
    a = b; // error: unreachable code

That doesn't require static introspection. The compiler can see that, the user doesn't have to worry about it.

Note, one thing that hasn't been mentioned is how we are now going to be able to make regular functions noreturn. This means templates that accept aliases will now have to deal with the possibility that those aliases are noreturn.

So if the compiler, for instance, marks the above as an error, what happens here?

foo(alias f)()
{
   f();
   auto a = b;
}

if f is a noreturn function, is this instantiation an error?

Currently not. This is either a bug or the compiler's flow analysis is not robust enough to detect this case.

int b;

auto foo(alias f)()
{
        f();
        auto a = b; //no unreachable code error
}

void main()
{
        foo!(() => assert(0))();
}


Reply via email to