diff --git a/include/new b/include/new index 29c1a8396..11f8fe667 100644 --- a/include/new +++ b/include/new @@ -52,16 +52,12 @@ void* operator new(std::size_t size, const std::nothrow_t&) noexcept; // repla void operator delete(void* ptr) noexcept; // replaceable void operator delete(void* ptr, std::size_t size) noexcept; // replaceable, C++14 void operator delete(void* ptr, const std::nothrow_t&) noexcept; // replaceable -void operator delete(void* ptr, std::size_t size, - const std::nothrow_t&) noexcept; // replaceable, C++14 void* operator new[](std::size_t size); // replaceable void* operator new[](std::size_t size, const std::nothrow_t&) noexcept; // replaceable void operator delete[](void* ptr) noexcept; // replaceable void operator delete[](void* ptr, std::size_t size) noexcept; // replaceable, C++14 void operator delete[](void* ptr, const std::nothrow_t&) noexcept; // replaceable -void operator delete[](void* ptr, std::size_t size, - const std::nothrow_t&) noexcept; // replaceable, C++14 void* operator new (std::size_t size, void* ptr) noexcept; void* operator new[](std::size_t size, void* ptr) noexcept; @@ -142,7 +138,6 @@ _LIBCPP_NEW_DELETE_VIS void operator delete(void* __p) _NOEXCEPT; _LIBCPP_NEW_DELETE_VIS void operator delete(void* __p, const std::nothrow_t&) _NOEXCEPT; #if defined(_LIBCPP_BUILDING_NEW) || _LIBCPP_STD_VER >= 14 _LIBCPP_NEW_DELETE_VIS void operator delete(void* __p, std::size_t __sz) _NOEXCEPT; -_LIBCPP_NEW_DELETE_VIS void operator delete(void* __p, std::size_t __sz, const std::nothrow_t&) _NOEXCEPT; #endif _LIBCPP_NEW_DELETE_VIS void* operator new[](std::size_t __sz) @@ -155,7 +150,6 @@ _LIBCPP_NEW_DELETE_VIS void operator delete[](void* __p) _NOEXCEPT; _LIBCPP_NEW_DELETE_VIS void operator delete[](void* __p, const std::nothrow_t&) _NOEXCEPT; #if defined(_LIBCPP_BUILDING_NEW) || _LIBCPP_STD_VER >= 14 _LIBCPP_NEW_DELETE_VIS void operator delete[](void* __p, std::size_t __sz) _NOEXCEPT; -_LIBCPP_NEW_DELETE_VIS void operator delete[](void* __p, std::size_t __sz, const std::nothrow_t&) _NOEXCEPT; #endif inline _LIBCPP_INLINE_VISIBILITY void* operator new (std::size_t, void* __p) _NOEXCEPT {return __p;} diff --git a/src/new.cpp b/src/new.cpp index c46d073fa..c28fcb591 100644 --- a/src/new.cpp +++ b/src/new.cpp @@ -138,13 +138,6 @@ operator delete(void* ptr, size_t) _NOEXCEPT ::operator delete(ptr); } -_LIBCPP_WEAK _LIBCPP_NEW_DELETE_VIS -void -operator delete(void* ptr, size_t, const std::nothrow_t& nt) _NOEXCEPT -{ - ::operator delete(ptr, nt); -} - _LIBCPP_WEAK _LIBCPP_NEW_DELETE_VIS void operator delete[] (void* ptr) _NOEXCEPT @@ -166,13 +159,6 @@ operator delete[] (void* ptr, size_t) _NOEXCEPT ::operator delete[](ptr); } -_LIBCPP_WEAK _LIBCPP_NEW_DELETE_VIS -void -operator delete[] (void* ptr, size_t, const std::nothrow_t& nt) _NOEXCEPT -{ - ::operator delete[](ptr, nt); -} - #endif // !__GLIBCXX__ namespace std diff --git a/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array_nothrow_replace.pass.cpp b/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array_nothrow_replace.pass.cpp deleted file mode 100644 index 59e8637f2..000000000 --- a/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array_nothrow_replace.pass.cpp +++ /dev/null @@ -1,109 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// test nothrow sized operator delete[] replacement. - -// Note that sized delete operator definitions below are simply ignored -// when sized deallocation is not supported, e.g., prior to C++14. - -// UNSUPPORTED: sanitizer-new-delete - -#include -#include -#include -#include -#include - -int unsized_delete_called = 0; -int unsized_delete_nothrow_called = 0; -int sized_delete_called = 0; -int sized_delete_nothrow_called = 0; - -void operator delete[](void* p) throw() -{ - ++unsized_delete_called; - std::free(p); -} - -void operator delete[](void* p, const std::nothrow_t&) throw() -{ - ++unsized_delete_nothrow_called; - std::free(p); -} - -void operator delete[](void* p, std::size_t) throw() -{ - ++sized_delete_called; - std::free(p); -} - -void operator delete[](void* p, std::size_t, const std::nothrow_t&) throw() -{ - ++sized_delete_nothrow_called; - std::free(p); -} - -int new_handler_called = 0; - -void new_handler() -{ - ++new_handler_called; - std::set_new_handler(0); -} - -bool A_constructed = false; - -struct A -{ - A() {A_constructed = true;} - ~A() {A_constructed = false;} -}; - -struct BadA : public A { - BadA() { throw std::bad_alloc(); } -}; - -int main() -{ - std::set_new_handler(new_handler); - try - { - void*volatile vp = operator new [] (std::numeric_limits::max(), std::nothrow); - assert(new_handler_called == 1); - assert(vp == 0); - } - catch (...) - { - assert(false); - } - try - { - A* ap = new(std::nothrow) BadA [3]; - assert(false); - } - catch (...) - { - assert(!A_constructed); -#if _LIBCPP_STD_VER >= 14 - // FIXME: Do we need a version of [Expr.Delete]#10 for nothrow - // deallocation functions (selecting sized ones whenever available)? - // It is not required by the standard. If it were, the following would - // be the expected behaviour (instead of the current one): - // assert(!unsized_delete_nothrow_called); - // assert(sized_delete_nothrow_called == 1); - assert(unsized_delete_nothrow_called == 1); - assert(!sized_delete_nothrow_called); -#else // if _LIBCPP_STD_VER < 14 - assert(unsized_delete_nothrow_called == 1); - assert(!sized_delete_nothrow_called); -#endif - assert(!unsized_delete_called); - assert(!sized_delete_called); - } -} diff --git a/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_nothrow_replace.pass.cpp b/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_nothrow_replace.pass.cpp deleted file mode 100644 index 2d39f433b..000000000 --- a/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_nothrow_replace.pass.cpp +++ /dev/null @@ -1,109 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// test nothrow sized operator delete replacement. - -// Note that sized delete operator definitions below are simply ignored -// when sized deallocation is not supported, e.g., prior to C++14. - -// UNSUPPORTED: sanitizer-new-delete - -#include -#include -#include -#include -#include - -int unsized_delete_called = 0; -int unsized_delete_nothrow_called = 0; -int sized_delete_called = 0; -int sized_delete_nothrow_called = 0; - -void operator delete(void* p) throw() -{ - ++unsized_delete_called; - std::free(p); -} - -void operator delete(void* p, const std::nothrow_t&) throw() -{ - ++unsized_delete_nothrow_called; - std::free(p); -} - -void operator delete(void* p, std::size_t) throw() -{ - ++sized_delete_called; - std::free(p); -} - -void operator delete(void* p, std::size_t, const std::nothrow_t&) throw() -{ - ++sized_delete_nothrow_called; - std::free(p); -} - -int new_handler_called = 0; - -void new_handler() -{ - ++new_handler_called; - std::set_new_handler(0); -} - -bool A_constructed = false; - -struct A -{ - A() {A_constructed = true;} - ~A() {A_constructed = false;} -}; - -struct BadA : public A { - BadA() { throw std::bad_alloc(); } -}; - -int main() -{ - std::set_new_handler(new_handler); - try - { - void*volatile vp = operator new (std::numeric_limits::max(), std::nothrow); - assert(new_handler_called == 1); - assert(vp == 0); - } - catch (...) - { - assert(false); - } - try - { - A* ap = new(std::nothrow) BadA; - assert(false); - } - catch (...) - { - assert(!A_constructed); -#if _LIBCPP_STD_VER >= 14 - // FIXME: Do we need a version of [Expr.Delete]#10 for nothrow - // deallocation functions (selecting sized ones whenever available)? - // It is not required by the standard. If it were, the following would - // be the expected behaviour (instead of the current one): - // assert(!unsized_delete_nothrow_called); - // assert(sized_delete_nothrow_called == 1); - assert(unsized_delete_nothrow_called == 1); - assert(!sized_delete_nothrow_called); -#else // if _LIBCPP_STD_VER < 14 - assert(unsized_delete_nothrow_called == 1); - assert(!sized_delete_nothrow_called); -#endif - assert(!unsized_delete_called); - assert(!sized_delete_called); - } -}