Tom Lane <t...@sss.pgh.pa.us> writes: > =?utf-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= <ilm...@ilmari.org> writes: >> Andres Freund <and...@anarazel.de> writes: >>> Particularly for something like libpq it's not quitetrivial to add >>> attributes like this, of course. We can't even depend on pg_config.h. >>> One way would be to define them in libpq-fe.h, guarded by an #ifdef, that's >>> "armed" by a commandline -D flag, if the compiler is supported? > >> Does it need a -D flag, wouldn't __has_attribute(malloc) (with the >> fallback definition in c.h) be enough? > > libpq-fe.h has to be compilable by application code that has never > heard of pg_config.h let alone c.h, so we'd have to tread carefully > about not breaking that property. But it seems like this would be > worth looking into.
The fallback code isn't exactly complicated, so we could just duplicate it in libpq-fe.h: #ifndef __has_attribute #define __has_attribute(attribute) 0 #endif And then do something like this: #if __has_attribute (malloc) #define pg_attribute_malloc __attribute__((malloc)) #define pg_attribute_deallocator(...) __attribute__((malloc(__VA_ARGS__))) #else #define pg_attribute_malloc #define pg_attribute_deallocator(...) #endif > regards, tom lane - ilmari