]> git.eshelyaron.com Git - emacs.git/commitdiff
* ccl.c (ASCENDING_ORDER): New macro, to work around GCC bug 43772.
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 15 Jun 2011 19:40:52 +0000 (12:40 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 15 Jun 2011 19:40:52 +0000 (12:40 -0700)
(GET_CCL_RANGE, IN_INT_RANGE): Use it.

src/ChangeLog
src/ccl.c

index 5dafba7cdc1e5a205f6b1343a860cde9a47bce96..d06cde56e655c0963ee53f2f34c48abd8c207673 100644 (file)
@@ -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.
index e2ef4f194f30b5697b5a6f153ea558261bb8fea7..30d151f00a05c5b4ce169b770386160b0c2b414b 100644 (file)
--- 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
+   <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43772>.  */
+#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.  */