/* If we're using gcc then tell it extra information so it can do more
* compile-time checks. */
#if __GNUC__ > 2
-#define NORETURN __attribute__((__noreturn__))
-#define CHECK_PRINTF(fmt, arg) __attribute__((format(printf, fmt, arg)))
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
#define ALLOC_SIZE(...) __attribute__((alloc_size(__VA_ARGS__)))
+#define CHECK_PRINTF(fmt, arg) __attribute__((format(printf, fmt, arg)))
+#else /* gcc < 4.3.0 */
+#define ALLOC_SIZE(...)
+#define CHECK_PRINTF(fmt, arg)
+#endif /* gcc < 4.3.0 */
+#define NORETURN __attribute__((__noreturn__))
#define CONST __attribute__((const))
#define MALLOC __attribute__((malloc))
#define NONNULL(...) __attribute__((nonnull(__VA_ARGS__)))