diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | src/system.h | 9 |
2 files changed, 13 insertions, 3 deletions
@@ -1,7 +1,12 @@ -2005-07-04 Paul Eggert <eggert@cs.ucla.edu> +2005-07-05 Paul Eggert <eggert@cs.ucla.edu> * Version 5.3.1. + * src/system.h (DECIMAL_DIGIT_ACCUMULATE): Generate a hard error + (not just a warning) if GCC is used and the types don't match. + +2005-07-04 Paul Eggert <eggert@cs.ucla.edu> + * src/system.h (VERIFY_W_TYPEOF): Remove; no longer needed. (DECIMAL_DIGIT_ACCUMULATE): Change last arg from T's maximum value to T itself. All callers changed. Check that T is unsigned, and diff --git a/src/system.h b/src/system.h index a22bfb04e..e3a99ab5d 100644 --- a/src/system.h +++ b/src/system.h @@ -811,13 +811,18 @@ ptr_align (void const *ptr, size_t alignment) then don't update Accum and return false to indicate it would overflow. Otherwise, set Accum to that new value and return true. Verify at compile-time that Type is Accum's type, and that Type is - unsigned. Accum must be an object, so that we can take its address. - Accum and Digit_val may be evaluated multiple times. */ + unsigned. Accum must be an object, so that we can take its + address. Accum and Digit_val may =be evaluated multiple times. + + The "Added check" below is not strictly required, but it causes GCC + to return a nonzero exit status instead of merely a warning + diagnostic, and that is more useful. */ #define DECIMAL_DIGIT_ACCUMULATE(Accum, Digit_val, Type) \ ( \ (void) (&(Accum) == (Type *) NULL), /* The type matches. */ \ verify_expr (! TYPE_SIGNED (Type)), /* The type is unsigned. */ \ + verify_expr (sizeof (Accum) == sizeof (Type)), /* Added check. */ \ (((Type) -1 / 10 < (Accum) \ || (Type) ((Accum) * 10 + (Digit_val)) < (Accum)) \ ? false : (((Accum) = (Accum) * 10 + (Digit_val)), true)) \ |