On Sat, 7 Sep 2013, Mike Stump wrote:


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?

I think using this function is illegal. It isn't marked noexcept, so it isn't allowed to return 0.

--
Marc Glisse

Reply via email to