Eu criei um par de funções:
void destroy_foo(void *ptr);
void *create_foo(void);
Como os nomes sugerem, estes funcionam de forma semelhante a malloc
e free
. Eu gostaria de usar o malloc
atributo de função gcc para informar o compilador sobre esse relacionamento para que esse código gerasse um aviso com -fanalyzer
:
void *ptr = create_foo();
destroy_foo(ptr);
destroy_foo(ptr);
Seguindo os exemplos do link mencionado acima, fiz
void *create_foo(void) __attribute__ ((malloc (destroy_foo)));
Embora o gcc (11.4.0) esteja bem com isso, o clang (14.0.0) reclama
error: 'malloc' attribute takes no arguments
void *create_foo(void) __attribute__ ((malloc (destroy_foo)));
^
Meu entendimento foi que os atributos do gcc funcionaram bem com o clang.
Os formulários atualmente implementados pelo GCC são:
Eles estão documentados em Common Function Attributes .
Clang parece estar atrasado neste jogo e implementa apenas a primeira forma:
Atributos em Clang