Issue
I've created a pair of functions:
void destroy_foo(void *ptr);
void *create_foo(void);
As the names suggest, these function akin to malloc
and free
. I'd like to use the malloc
gcc function attribute to inform the compiler of this relationship so that this code would raise a warning with -fanalyzer
:
void *ptr = create_foo();
destroy_foo(ptr);
destroy_foo(ptr);
Following the examples from the fore-mentioned link, I did
void *create_foo(void) __attribute__ ((malloc (destroy_foo)));
While gcc (11.4.0) is fine with this, clang (14.0.0) complains
error: 'malloc' attribute takes no arguments
void *create_foo(void) __attribute__ ((malloc (destroy_foo)));
^
My understanding was that gcc attributes worked just fine with clang.
Solution
The forms currently implemented by GCC are:
malloc
malloc (deallocator)
malloc (deallocator, ptr-index)
They are documented in Common Function Attributes.
Clang seems to be behind in this game and implements only the first form:
Answered By - Blagovest Buyukliev Answer Checked By - Mary Flores (WPSolving Volunteer)