This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: operator new returns nonzero

On Sep 7, 2013, at 12:37 PM, Gabriel Dos Reis <> wrote:

> On Sat, Sep 7, 2013 at 2:27 PM, Marc Glisse <> wrote:
>> On Sat, 7 Sep 2013, Mike Stump wrote:
>>> On Sep 7, 2013, at 3:33 AM, Marc Glisse <> 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?

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]