http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59083
--- Comment #12 from Jeffrey A. Law <law at redhat dot com> --- I'll note further, that an implementation of sprintf, memcpy, etc could check for a NULL pointer internally and raise a trap on their own rather than dereferencing the invalid pointer and still be a conforming implementation. In summary, you can't make the assumption that you'll actually get a segfault/bus error like your code wants to do. Contrast that to an explicit *0 = <whatever> which might appear in user code. While executing that code still results in undefined behaviour, one can easily make an argument from a QOI standpoint that we should still allow the memory dereference to occur to generate the SIGBUS/SIGSEGV.