add function attributes __malloc__ and __alloc_size__ for gcc and clang

This commit is contained in:
2025-11-07 16:43:02 +01:00
parent 9748cbd394
commit 76a89b8cee
4 changed files with 21 additions and 2 deletions

View File

@@ -67,7 +67,7 @@ void cantProceed(
* Will never return NULL otherwise.
*/
LIBCOM_API void * callocMustSucceed(size_t count, size_t size,
const char *errorMessage);
const char *errorMessage) EPICS_MALLOC(1,2);
/** \brief A malloc() which suspends on error.
* \param size Size of block to allocate.
* \param errorMessage Context added to logged error message
@@ -76,7 +76,8 @@ LIBCOM_API void * callocMustSucceed(size_t count, size_t size,
* Will always return NULL for a zero length allocation.
* Will never return NULL otherwise.
*/
LIBCOM_API void * mallocMustSucceed(size_t size, const char *errorMessage);
LIBCOM_API void * mallocMustSucceed(size_t size, const char *errorMessage)
EPICS_MALLOC(1);
/** @} */
#ifdef __cplusplus

View File

@@ -63,4 +63,9 @@
*/
#define EPICS_NORETURN __attribute__((noreturn))
/*
* malloc marker takes 1 or 2 args: (index of size) or (index of count, index of element size)
*/
#define EPICS_MALLOC(...) __attribute__((__malloc__, __alloc_size__(__VA_ARGS__)))
#endif /* ifndef compilerSpecific_h */

View File

@@ -69,4 +69,13 @@
#define EPICS_NORETURN __attribute__((noreturn))
#endif
/*
* malloc marker takes 1 or 2 args: (index of size) or (index of count, index of element size)
*/
#if __GNUC__ * 100 + __GNUC_MINOR__ >= 403
#define EPICS_MALLOC(...) __attribute__((__malloc__, __alloc_size__(__VA_ARGS__)))
#else
#define EPICS_MALLOC(...) __attribute__((__malloc__))
#endif
#endif /* ifndef compilerSpecific_h */

View File

@@ -56,6 +56,10 @@
# define EPICS_NORETURN
#endif
#ifndef EPICS_MALLOC
# define EPICS_MALLOC(...)
#endif
#ifndef EPICS_FUNCTION
#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)) || (defined(__cplusplus) && __cplusplus>=201103L)
# define EPICS_FUNCTION __func__