https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78822
Pedro Alves <palves at redhat dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |palves at redhat dot com
--- Comment #19 from Pedro Alves <palves at redhat dot com> ---
> The reason for ensuring xmalloc_failed is used is to get sane and consistent
> behavior on memory allocation failures (same error message with the same
> detail), rather than just crashing the compiler, or saying terminate has been
> called and similar.
You can replace the global operator new/new[] to call xmalloc instead of
malloc. Then memory allocation by std::string etc. ends up in xmalloc ->
xmalloc_failed. That's what I did for GDB:
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/common/new-op.c;h=c67239cbe87c1f7e22e234a1a2cc2920f9ed22a4;hb=HEAD
Replacing global new is better than installing a new_handler that calls
xmalloc_failed with std::set_new_handler, IMO, since replacing global new
handles allocation in global static constructors too.
OTOH, dynamic allocation in global objects is best avoided anyway, so you can
always go the std::set_new_handler route if replacing global new doesn't work
on some non-confirming host.