A small D2 function:

import std.c.stdlib: exit;
int foo(int x) {
    if (x > 0)
        return x;
    exit(0);
    //assert(0);
}
void main() {}


DMD 2.051 gives this compile-time error:
test.d(2): Error: function test4.foo no return exp; or assert(0); at end of 
function

If I comment out the the final exit(0) and uncomment the assert(0), the code 
compiles correctly.
Is it meaningful and good to give std.c.stdlib.exit the same function-end 
semantics of assert(0)?

GCC has a "noreturn" function attribute that allows to tell the compiler what 
functions (beside few default ones like exit) don't return:
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#index-g_t_0040code_007bnoreturn_007d-function-attribute-2464

Bye,
bearophile

Reply via email to