A new error handler for bad alloc fault situations in long running processes


We would like to introduce a new type of llvm error handler for handling bad alloc fault situations.
LLVM already provides a fatal error handler for serious non-recoverable error situations which by
default writes some error information to stderr and calls exit(1) at the end.

For long running processes (e.g. a server application), exiting the process is not an acceptable option,
especially not when the system is in a temporary resource bottleneck with a good chance to recover from
this fault situation. In such a situation you would rather throw an exception to stop the current
compilation and try to overcome the resource bottleneck. But the user should be aware of the problem of throwing
an exception in bad alloc situations, e.g. you must not do any allocations in the unwind chain.
By default the bad alloc handler calls the report_fatal_error function.

The new handler can also be used to distinguish from general fatal error situations where recovering is no option.
It should be used in cases where a clean unwind after the allocation is guaranteed.

We have already created a patch and submitted to the Phabricator Tool ⚙ D34753 [Support] - Add bad alloc error handler for handling allocation malfunctions . The
Patch also contains an example (in Mutex.cpp) where the report_bad_alloc function is called in case of a malloc returns a nullptr.

If this patch gets accepted we would create similar patches to fix corresponding malloc/calloc usages in the llvm code.

Best regards,