[clang] [libc++] Fix the behavior of throwing `operator new` under -fno-exceptions (PR #69498)

James Y Knight via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 24 16:10:40 PDT 2023


jyknight wrote:

I think we can check whether it's been overridden more easily using an asm alias like this (when libc++ is built under -fno-exceptions):
```
#include <cstdlib>
#include <new>

__attribute__((weak)) void* operator new(std::size_t size) {
  void* mem = malloc(size);
  if (!mem) abort();
  return mem;
}

// TODO: ifdef for MSVC mangling.
static void* original_operator_new(std::size_t size) __attribute__((alias(__USER_LABEL_PREFIX__ "_Znwm")));

__attribute__((weak)) void* operator new(std::size_t size, std::nothrow_t) noexcept {
  if (static_cast<void*(*)(std::size_t)>(&::operator new) != original_operator_new)
    abort();
  return malloc(size);
}
```


https://github.com/llvm/llvm-project/pull/69498


More information about the cfe-commits mailing list