diff options
Diffstat (limited to 'contrib/libc++/src/new.cpp')
-rw-r--r-- | contrib/libc++/src/new.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/contrib/libc++/src/new.cpp b/contrib/libc++/src/new.cpp index 1e8ed88..1c171a8 100644 --- a/contrib/libc++/src/new.cpp +++ b/contrib/libc++/src/new.cpp @@ -13,14 +13,19 @@ #if __APPLE__ #include <cxxabi.h> - // On Darwin, there are two STL shared libraries and a lower level ABI - // shared libray. The global holding the current new handler is - // in the ABI library and named __cxa_new_handler. - #define __new_handler __cxxabiapple::__cxa_new_handler + + #ifndef _LIBCPPABI_VERSION + // On Darwin, there are two STL shared libraries and a lower level ABI + // shared libray. The global holding the current new handler is + // in the ABI library and named __cxa_new_handler. + #define __new_handler __cxxabiapple::__cxa_new_handler + #endif #else // __APPLE__ static std::new_handler __new_handler; #endif +#if !defined (LIBCXXRT) // && !defined(_LIBCPPABI_VERSION) + // Implement all new and delete operators as weak definitions // in this shared library, so that they can be overriden by programs // that define non-weak copies of the functions. @@ -83,7 +88,7 @@ operator new[](size_t size) __attribute__((__weak__, __visibility__("default"))) void* -operator new[](size_t size, const std::nothrow_t& nothrow) _NOEXCEPT +operator new[](size_t size, const std::nothrow_t&) _NOEXCEPT { void* p = 0; #ifndef _LIBCPP_NO_EXCEPTIONS @@ -129,11 +134,15 @@ operator delete[] (void* ptr, const std::nothrow_t&) _NOEXCEPT ::operator delete[](ptr); } +#endif // !_LIBCPPABI_VERSION && !LIBCXXRT + namespace std { const nothrow_t nothrow = {}; +#ifndef _LIBCPPABI_VERSION + new_handler set_new_handler(new_handler handler) _NOEXCEPT { @@ -146,6 +155,8 @@ get_new_handler() _NOEXCEPT return __sync_fetch_and_add(&__new_handler, (new_handler)0); } +#ifndef LIBCXXRT + bad_alloc::bad_alloc() _NOEXCEPT { } @@ -174,6 +185,9 @@ bad_array_new_length::what() const _NOEXCEPT return "bad_array_new_length"; } +#endif +#endif //LIBCXXRT + void __throw_bad_alloc() { |