180e4ccabSLouis Dionne //===----------------------------------------------------------------------===// 280e4ccabSLouis Dionne // 380e4ccabSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 480e4ccabSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 580e4ccabSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 680e4ccabSLouis Dionne // 780e4ccabSLouis Dionne //===----------------------------------------------------------------------===// 880e4ccabSLouis Dionne 980e4ccabSLouis Dionne #include <new> 1080e4ccabSLouis Dionne 1180e4ccabSLouis Dionne #include "include/atomic_support.h" 1280e4ccabSLouis Dionne 1380e4ccabSLouis Dionne #if defined(_LIBCPP_ABI_MICROSOFT) 1480e4ccabSLouis Dionne # if !defined(_LIBCPP_ABI_VCRUNTIME) 1580e4ccabSLouis Dionne # define _LIBPCPP_DEFINE_NEW_HANDLER 1680e4ccabSLouis Dionne # endif 1780e4ccabSLouis Dionne #elif defined(LIBCXX_BUILDING_LIBCXXABI) 1880e4ccabSLouis Dionne // nothing to do, we use the one from libc++abi 1980e4ccabSLouis Dionne #elif defined(LIBCXXRT) 2080e4ccabSLouis Dionne # define _LIBPCPP_DEFINE_NEW_HANDLER 2180e4ccabSLouis Dionne #elif defined(__GLIBCXX__) 2280e4ccabSLouis Dionne // nothing to do, we use the one from libstdc++/libsupc++ 2380e4ccabSLouis Dionne #else 2480e4ccabSLouis Dionne # define _LIBPCPP_DEFINE_NEW_HANDLER 2580e4ccabSLouis Dionne #endif 2680e4ccabSLouis Dionne 2780e4ccabSLouis Dionne #if defined(_LIBPCPP_DEFINE_NEW_HANDLER) 2880e4ccabSLouis Dionne 2980e4ccabSLouis Dionne namespace std { // purposefully not versioned 3080e4ccabSLouis Dionne 3180e4ccabSLouis Dionne static constinit std::new_handler __new_handler = nullptr; 3280e4ccabSLouis Dionne set_new_handler(new_handler handler)33*aee3a9f5SLouis Dionnenew_handler set_new_handler(new_handler handler) noexcept { return __libcpp_atomic_exchange(&__new_handler, handler); } 3480e4ccabSLouis Dionne get_new_handler()35*aee3a9f5SLouis Dionnenew_handler get_new_handler() noexcept { return __libcpp_atomic_load(&__new_handler); } 3680e4ccabSLouis Dionne 3780e4ccabSLouis Dionne } // namespace std 3880e4ccabSLouis Dionne 3980e4ccabSLouis Dionne #endif // _LIBPCPP_DEFINE_NEW_HANDLER 40