From b1c46f026de9d185ba86ffb1b23c50f2bd095ccf Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 15 Jun 2011 12:40:52 -0700 Subject: [PATCH] * ccl.c (ASCENDING_ORDER): New macro, to work around GCC bug 43772. (GET_CCL_RANGE, IN_INT_RANGE): Use it. --- src/ChangeLog | 3 +++ src/ccl.c | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 5dafba7cdc1..d06cde56e65 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -2,6 +2,9 @@ Integer overflow and signedness fixes. + * ccl.c (ASCENDING_ORDER): New macro, to work around GCC bug 43772. + (GET_CCL_RANGE, IN_INT_RANGE): Use it. + * fileio.c: Don't assume EMACS_INT fits in off_t. (emacs_lseek): New static function. (Finsert_file_contents, Fwrite_region): Use it. diff --git a/src/ccl.c b/src/ccl.c index e2ef4f194f3..30d151f00a0 100644 --- a/src/ccl.c +++ b/src/ccl.c @@ -745,11 +745,15 @@ while(0) #endif +/* Use "&" rather than "&&" to suppress a bogus GCC warning; see + . */ +#define ASCENDING_ORDER(lo, med, hi) (((lo) <= (med)) & ((med) <= (hi))) + #define GET_CCL_RANGE(var, ccl_prog, ic, lo, hi) \ do \ { \ EMACS_INT prog_word = XINT ((ccl_prog)[ic]); \ - if (! ((lo) <= prog_word && prog_word <= (hi))) \ + if (! ASCENDING_ORDER (lo, prog_word, hi)) \ CCL_INVALID_CMD; \ (var) = prog_word; \ } \ @@ -761,7 +765,7 @@ while(0) #define GET_CCL_INT(var, ccl_prog, ic) \ GET_CCL_RANGE (var, ccl_prog, ic, INT_MIN, INT_MAX) -#define IN_INT_RANGE(val) (INT_MIN <= (val) && (val) <= INT_MAX) +#define IN_INT_RANGE(val) ASCENDING_ORDER (INT_MIN, val, INT_MAX) /* Encode one character CH to multibyte form and write to the current output buffer. If CH is less than 256, CH is written as is. */ -- 2.11.4.GIT