From c877abe961024671beafe55dabdd716df6795578 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Tue, 14 Jan 2020 12:53:33 -0800 Subject: [PATCH v3 03/10] WIP: Annotate palloc() with malloc and other compiler attributes In particularly malloc is useful, allowing the compiler to realize that the return value does not alias with other data, allowing other optimizations. If we were to do this, we'd obviously need to hide these behind macros to support compilers without those attributes. Author: Reviewed-By: Discussion: https://postgr.es/m/ Backpatch: --- src/include/utils/palloc.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/include/utils/palloc.h b/src/include/utils/palloc.h index 773a5d2c347..642b24b2bd2 100644 --- a/src/include/utils/palloc.h +++ b/src/include/utils/palloc.h @@ -75,7 +75,11 @@ extern void *MemoryContextAllocExtended(MemoryContext context, extern void *MemoryContextAllocAligned(MemoryContext context, Size size, Size alignto, int flags); -extern void *palloc(Size size); +extern void *palloc(Size size) +#if __has_attribute(malloc) && __has_attribute(assume_aligned) && __has_attribute(returns_nonnull) && __has_attribute(warn_unused_result) + __attribute__((malloc, assume_aligned(MAXIMUM_ALIGNOF), returns_nonnull, warn_unused_result)) +#endif + ; extern void *palloc0(Size size); extern void *palloc_extended(Size size, int flags); extern void *palloc_aligned(Size size, Size alignto, int flags); -- 2.38.0