diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | src/common/compat.h | 12 |
2 files changed, 14 insertions, 1 deletions
@@ -36,6 +36,9 @@ Changes in version 0.2.0.29-rc - 2008-07-08 - Correctly detect transparent proxy support on Linux hosts that require in.h to be included before netfilter_ipv4.h. Patch from coderman. + - Stop using __attribute__((nonnull)) with GCC: it can give us useful + warnings (occasionally), but it can also cause the compiler to + eliminate error-checking code. Suggested by Peter Gutmann. Changes in version 0.2.0.28-rc - 2008-06-13 diff --git a/src/common/compat.h b/src/common/compat.h index 75b6e5420f..ea66093568 100644 --- a/src/common/compat.h +++ b/src/common/compat.h @@ -122,7 +122,17 @@ extern INLINE double U64_TO_DBL(uint64_t x) { #define ATTR_CONST __attribute__((const)) #define ATTR_MALLOC __attribute__((malloc)) #define ATTR_NORETURN __attribute__((noreturn)) -#define ATTR_NONNULL(x) __attribute__((nonnull x)) +/* Alas, nonnull is not at present a good idea for us. We'd like to get + * warnings when we pass NULL where we shouldn't (which nonnull does, albeit + * spottily), but we don't want to tell the compiler to make optimizations + * with the assumption that the argument can't be NULL (since this would make + * many of our checks go away, and make our code less robust against + * programming errors). Unfortunately, nonnull currently does both of these + * things, and there's no good way to split them up. + * + * #define ATTR_NONNULL(x) __attribute__((nonnull x)) */ +#define ATTR_NONNULL(x) + /** Macro: Evaluates to <b>exp</b> and hints the compiler that the value * of <b>exp</b> will probably be true. */ #define PREDICT_LIKELY(exp) __builtin_expect((exp), 1) |