From 9f56e3d8a5c97ba379f9d79335ac6f4287121611 Mon Sep 17 00:00:00 2001 From: Piotr Pryga Date: Thu, 15 Sep 2022 18:47:05 +0200 Subject: [PATCH] cpp: Add C++20 [[nodiscard]] attribute to operator new C++20 standard added [[nodiscard]] attribute to operator new definitions. In case value returned by operator new is ignored, compiler emits a warning. The commit adds the attribute to operator new definitions. Signed-off-by: Piotr Pryga --- subsys/cpp/cpp_new.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/subsys/cpp/cpp_new.cpp b/subsys/cpp/cpp_new.cpp index 4a2c0044602..899ffc3bbfe 100644 --- a/subsys/cpp/cpp_new.cpp +++ b/subsys/cpp/cpp_new.cpp @@ -13,45 +13,51 @@ #define NOEXCEPT noexcept #endif /* __cplusplus */ -void* operator new(size_t size) +#if __cplusplus < 202002L +#define NODISCARD +#else +#define NODISCARD [[nodiscard]] +#endif /* __cplusplus */ + +NODISCARD void* operator new(size_t size) { return malloc(size); } -void* operator new[](size_t size) +NODISCARD void* operator new[](size_t size) { return malloc(size); } -void* operator new(std::size_t size, const std::nothrow_t& tag) NOEXCEPT +NODISCARD void* operator new(std::size_t size, const std::nothrow_t& tag) NOEXCEPT { return malloc(size); } -void* operator new[](std::size_t size, const std::nothrow_t& tag) NOEXCEPT +NODISCARD void* operator new[](std::size_t size, const std::nothrow_t& tag) NOEXCEPT { return malloc(size); } #if __cplusplus >= 201703L -void* operator new(size_t size, std::align_val_t al) +NODISCARD void* operator new(size_t size, std::align_val_t al) { return aligned_alloc(static_cast(al), size); } -void* operator new[](std::size_t size, std::align_val_t al) +NODISCARD void* operator new[](std::size_t size, std::align_val_t al) { return aligned_alloc(static_cast(al), size); } -void* operator new(std::size_t size, std::align_val_t al, - const std::nothrow_t&) NOEXCEPT +NODISCARD void* operator new(std::size_t size, std::align_val_t al, + const std::nothrow_t&) NOEXCEPT { return aligned_alloc(static_cast(al), size); } -void* operator new[](std::size_t size, std::align_val_t al, - const std::nothrow_t&) NOEXCEPT +NODISCARD void* operator new[](std::size_t size, std::align_val_t al, + const std::nothrow_t&) NOEXCEPT { return aligned_alloc(static_cast(al), size); }