On Sep 7, 2013, at 12:37 PM, Gabriel Dos Reis <g...@integrable-solutions.net> wrote:
> On Sat, Sep 7, 2013 at 2:27 PM, Marc Glisse <marc.gli...@inria.fr> wrote: >> On Sat, 7 Sep 2013, Mike Stump wrote: >> >>> On Sep 7, 2013, at 3:33 AM, Marc Glisse <marc.gli...@inria.fr> wrote: >>>> >>>> this patch teaches the compiler that operator new, when it can throw, >>>> isn't allowed to return a null pointer. >>> >>> >>> You sure: >>> >>> @item -fcheck-new >>> @opindex fcheck-new >>> Check that the pointer returned by @code{operator new} is non-null >>> before attempting to modify the storage allocated. This check is >>> normally unnecessary because the C++ standard specifies that >>> @code{operator new} only returns @code{0} if it is declared >>> @samp{throw()}, in which case the compiler always checks the >>> return value even without this option. In all other cases, when >>> @code{operator new} has a non-empty exception specification, memory >>> exhaustion is signalled by throwing @code{std::bad_alloc}. See also >>> @samp{new (nothrow)}. >>> >>> ? >> >> >> Thanks, I didn't know that option. But it doesn't do the same. > > Indeed. Can this throw: void *operator new (long unsigned int s) { return 0; } ? Is this allowed to return 0?