From: Alejandro Colomar Date: Thu, 9 May 2024 22:58:23 +0000 (+0200) Subject: lib/alloc.h: Reimplement [X]REALLOC[F]() macros with _Generic(3) X-Git-Tag: 4.15.2~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26c9dd37157353092e8709255a6a601915057c05;p=thirdparty%2Fshadow.git lib/alloc.h: Reimplement [X]REALLOC[F]() macros with _Generic(3) Instead of GNU builtins and extensions, these macros can be implemented with C11's _Generic(3), and the result is much simpler (and safer, since it's now an error, not just a warning). Signed-off-by: Alejandro Colomar --- diff --git a/lib/alloc.h b/lib/alloc.h index 0e0488494..39405a56f 100644 --- a/lib/alloc.h +++ b/lib/alloc.h @@ -1,8 +1,5 @@ -/* - * SPDX-FileCopyrightText: 2023, Alejandro Colomar - * - * SPDX-License-Identifier: BSD-3-Clause - */ +// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar +// SPDX-License-Identifier: BSD-3-Clause #ifndef SHADOW_INCLUDE_LIB_MALLOC_H_ @@ -27,31 +24,19 @@ #define XMALLOC(n, type) ((type *) xmallocarray(n, sizeof(type))) #define REALLOC(ptr, n, type) \ -({ \ - __auto_type p_ = (ptr); \ - \ - static_assert(__builtin_types_compatible_p(typeof(p_), type *), ""); \ - \ - (type *) reallocarray(p_, n, sizeof(type)); \ -}) +( \ + _Generic(ptr, type *: (type *) reallocarray(ptr, n, sizeof(type))) \ +) #define REALLOCF(ptr, n, type) \ -({ \ - __auto_type p_ = (ptr); \ - \ - static_assert(__builtin_types_compatible_p(typeof(p_), type *), ""); \ - \ - (type *) reallocarrayf(p_, n, sizeof(type)); \ -}) +( \ + _Generic(ptr, type *: (type *) reallocarrayf(ptr, n, sizeof(type))) \ +) #define XREALLOC(ptr, n, type) \ -({ \ - __auto_type p_ = (ptr); \ - \ - static_assert(__builtin_types_compatible_p(typeof(p_), type *), ""); \ - \ - (type *) xreallocarray(p_, n, sizeof(type)); \ -}) +( \ + _Generic(ptr, type *: (type *) xreallocarray(ptr, n, sizeof(type))) \ +) ATTR_MALLOC(free)