From 5446fa7ae922dd1aced35028799c4f615fd0dad9 Mon Sep 17 00:00:00 2001 From: Jonathan Reichelt Gjertsen Date: Fri, 21 May 2021 17:38:31 +0200 Subject: [PATCH 1/2] Define `void operator delete[](void *p, std::size_t n)` in new_delete.cpp This prevents the following warning when compiling with `-Wextra`: ``` [redacted]/pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp:24:6: error: the program should also define 'void operator delete [](void*, unsigned int)' [-Werror=sized-deallocation] 24 | void operator delete[](void *p) noexcept { std::free(p); } | ^~~~~~~~ ``` This function signature was introduced in C++14. I don't _think_ that should cause any issues, but I'm not sure. --- src/rp2_common/pico_standard_link/new_delete.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rp2_common/pico_standard_link/new_delete.cpp b/src/rp2_common/pico_standard_link/new_delete.cpp index a7dd3b0ab..c575c702b 100644 --- a/src/rp2_common/pico_standard_link/new_delete.cpp +++ b/src/rp2_common/pico_standard_link/new_delete.cpp @@ -23,4 +23,6 @@ void operator delete(void *p) { std::free(p); } void operator delete[](void *p) noexcept { std::free(p); } +void operator delete[](void *p, __unused std::size_t n) noexcept { std::free(p); } + #endif From 45f078539d9ed118c135f7185078aea3c5ae9b0b Mon Sep 17 00:00:00 2001 From: Jonathan Reichelt Gjertsen Date: Sun, 23 May 2021 13:17:53 +0200 Subject: [PATCH 2/2] Only define the sized deallocation functions for C++ versions that have them --- src/rp2_common/pico_standard_link/new_delete.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/rp2_common/pico_standard_link/new_delete.cpp b/src/rp2_common/pico_standard_link/new_delete.cpp index c575c702b..c122dc0e9 100644 --- a/src/rp2_common/pico_standard_link/new_delete.cpp +++ b/src/rp2_common/pico_standard_link/new_delete.cpp @@ -17,12 +17,16 @@ void *operator new[](std::size_t n) { return std::malloc(n); } -void operator delete(void *p, __unused std::size_t n) noexcept { std::free(p); } - void operator delete(void *p) { std::free(p); } void operator delete[](void *p) noexcept { std::free(p); } +#if __cpp_sized_deallocation + +void operator delete(void *p, __unused std::size_t n) noexcept { std::free(p); } + void operator delete[](void *p, __unused std::size_t n) noexcept { std::free(p); } #endif + +#endif