From 3099a6bf2add35ac6a0c7ce4cbb6c794d6269d19 Mon Sep 17 00:00:00 2001 From: Daniel Bertalan Date: Thu, 15 Jul 2021 13:50:55 +0200 Subject: Kernel+AK: Generate compile-time error for non-sized `delete` This is a much more ergonomic option than getting a `VERIFY_NOT_REACHED()` failure at run-time. I encountered this issue with Clang, where sized deallocation is not the default due to ABI breakage concerns. Note that we can't simply just not declare these functions, because the C++ standard states: > If this function with size parameter is defined, the program shall > also define the version without the size parameter. --- AK/Platform.h | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'AK') 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 -- cgit v1.2.3