diff --git a/AK/Platform.h b/AK/Platform.h index 2924f53cc3..8f9243f25f 100644 --- a/AK/Platform.h +++ b/AK/Platform.h @@ -59,6 +59,15 @@ #endif #define NAKED __attribute__((naked)) +#ifdef DISALLOW +# undef DISALLOW +#endif +#ifdef __clang__ +# define DISALLOW(message) __attribute__((diagnose_if(1, message, "error"))) +#else +# define DISALLOW(message) __attribute__((error(message))) +#endif + // GCC doesn't have __has_feature but clang does #ifndef __has_feature # define __has_feature(...) 0 diff --git a/Kernel/Heap/kmalloc.h b/Kernel/Heap/kmalloc.h index 2c005d2a80..f05766ff21 100644 --- a/Kernel/Heap/kmalloc.h +++ b/Kernel/Heap/kmalloc.h @@ -64,14 +64,15 @@ inline void* operator new[](size_t, void* p) { return p; } [[nodiscard]] void* operator new(size_t size, std::align_val_t); [[nodiscard]] void* operator new(size_t size, std::align_val_t, const std::nothrow_t&) noexcept; -void operator delete(void* ptr) noexcept; +void operator delete(void* ptr) noexcept DISALLOW("All deletes in the kernel should have a known size."); void operator delete(void* ptr, size_t) noexcept; +void operator delete(void* ptr, std::align_val_t) noexcept DISALLOW("All deletes in the kernel should have a known size."); void operator delete(void* ptr, size_t, std::align_val_t) noexcept; [[nodiscard]] void* operator new[](size_t size); [[nodiscard]] void* operator new[](size_t size, const std::nothrow_t&) noexcept; -void operator delete[](void* ptrs) noexcept; +void operator delete[](void* ptrs) noexcept DISALLOW("All deletes in the kernel should have a known size."); void operator delete[](void* ptr, size_t) noexcept; [[gnu::malloc, gnu::returns_nonnull, gnu::alloc_size(1)]] void* kmalloc(size_t);