From: Paul Eggert Date: Tue, 5 Jul 2005 22:20:17 +0000 (+0000) Subject: (DECIMAL_DIGIT_ACCUMULATE): Generate a hard error X-Git-Tag: CPPI-1_12~303 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fce3dd98703caff8417ff75475ccda38d8713ff0;p=thirdparty%2Fcoreutils.git (DECIMAL_DIGIT_ACCUMULATE): Generate a hard error (not just a warning) if GCC is used and the types don't match. --- diff --git a/ChangeLog b/ChangeLog index 67e6d00693..e73030873e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,12 @@ -2005-07-04 Paul Eggert +2005-07-05 Paul Eggert * 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 + * 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 a22bfb04e8..e3a99ab5d3 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)) \