-#ifdef __GNUC__
-#define PRINTF_FUNCTION(A,B) __attribute__((format(printf,A,B)))
+#if defined(__GNUC__) || defined(__clang__)
+# define PRINTF_FUNCTION(A,B) __attribute__((format(printf,A,B)))
+# define ARG_UNUSED __attribute__((__unused__))
+# define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
+# define ALLOC __attribute__((malloc))
+# define ALLOC_SIZE(A) __attribute__((alloc_size(A)))
+# define NORETURN __attribute__((noreturn))