Ellery Newcomer wrote: > On 06/22/2010 05:36 PM, Ali Çehreli wrote: >> Jonathan M Davis wrote: >> > Steven Schveighoffer wrote: >> >> >> all calls to assert are removed by the compiler in release mode. I >> don't >> >> think there's a way to implement that via a library (it would be nice >> >> though!) >> >> > Also IIRC, the compiler uses assert(0) to ensure that functions blow >> up at >> > runtime if you manage to hit the end of them without a return statement. >> >> I just read in TDPL that the assert(0) calls in user code are not >> removed even in release mode. >> >> Ali > > Really? > > // test.d > void main(){ > assert(0); > } > > $ dmd test -release > $ ./test > Segmentation fault (core dumped) > > good job, dmd. Can anyone see if anything is going on here?
According to TDPL, assert(false) is treated specially and never removed. It serves two purposes: - portable way of issuing the HLT instruction - telling the compiles that everything after is dead code, the compiler recognizes the meaning assert(false)