From b68dbf572eb79d40b81a503dc72a523d4c783792 Mon Sep 17 00:00:00 2001 From: Jakub Mazurkiewicz Date: Tue, 23 Apr 2024 15:30:39 +0200 Subject: [PATCH 1/2] ``: Don't use `new[]` and `delete[]` operators --- stl/inc/generator | 4 ++-- tests/std/tests/P2502R2_generator_promise/test.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/stl/inc/generator b/stl/inc/generator index 0df72ea1c9d..826f20ff9ac 100644 --- a/stl/inc/generator +++ b/stl/inc/generator @@ -128,7 +128,7 @@ private: } static void __stdcall _Dealloc_delete(void* const _Ptr, const size_t _Size) noexcept { - ::operator delete[](_Ptr, _Size + sizeof(_Dealloc_fn)); + ::operator delete(_Ptr, _Size + sizeof(_Dealloc_fn)); } template @@ -164,7 +164,7 @@ private: public: static void* operator new(const size_t _Size) { // default: new/delete - void* const _Ptr = ::operator new[](_Size + sizeof(_Dealloc_fn)); + void* const _Ptr = ::operator new(_Size + sizeof(_Dealloc_fn)); const _Dealloc_fn _Dealloc = _Dealloc_delete; _CSTD memcpy(static_cast(_Ptr) + _Size, &_Dealloc, sizeof(_Dealloc_fn)); return _Ptr; diff --git a/tests/std/tests/P2502R2_generator_promise/test.cpp b/tests/std/tests/P2502R2_generator_promise/test.cpp index 43958421fd7..af63df99670 100644 --- a/tests/std/tests/P2502R2_generator_promise/test.cpp +++ b/tests/std/tests/P2502R2_generator_promise/test.cpp @@ -22,6 +22,16 @@ using namespace std; +#pragma warning(disable : 28251) // Inconsistent annotation for 'new[]': this instance has no annotations. + +void* operator new[](size_t) { + unreachable(); +} + +void operator delete[](void*) noexcept { + unreachable(); +} + template concept HasOperatorNew = requires(Args&&... args) { { Promise::operator new(forward(args)...) } -> same_as; From 4ed4e5a8f87be374ed42e6a058b602776a2831ec Mon Sep 17 00:00:00 2001 From: Jakub Mazurkiewicz Date: Tue, 23 Apr 2024 20:52:17 +0200 Subject: [PATCH 2/2] Use `std::abort` --- tests/std/tests/P2502R2_generator_promise/test.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/std/tests/P2502R2_generator_promise/test.cpp b/tests/std/tests/P2502R2_generator_promise/test.cpp index af63df99670..3266ba2572e 100644 --- a/tests/std/tests/P2502R2_generator_promise/test.cpp +++ b/tests/std/tests/P2502R2_generator_promise/test.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -25,11 +26,11 @@ using namespace std; #pragma warning(disable : 28251) // Inconsistent annotation for 'new[]': this instance has no annotations. void* operator new[](size_t) { - unreachable(); + abort(); } void operator delete[](void*) noexcept { - unreachable(); + abort(); } template