diff options
| author | Paul Eggert | 2011-06-15 12:40:52 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-06-15 12:40:52 -0700 |
| commit | b1c46f026de9d185ba86ffb1b23c50f2bd095ccf (patch) | |
| tree | 9f14768fa2b513e63a69102eb7514a129db872e5 | |
| parent | 096a9774c8a8c8710f07e2fbab54e35efeb38050 (diff) | |
| download | emacs-b1c46f026de9d185ba86ffb1b23c50f2bd095ccf.tar.gz emacs-b1c46f026de9d185ba86ffb1b23c50f2bd095ccf.zip | |
* ccl.c (ASCENDING_ORDER): New macro, to work around GCC bug 43772.
(GET_CCL_RANGE, IN_INT_RANGE): Use it.
| -rw-r--r-- | src/ChangeLog | 3 | ||||
| -rw-r--r-- | 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 @@ | |||
| 2 | 2 | ||
| 3 | Integer overflow and signedness fixes. | 3 | Integer overflow and signedness fixes. |
| 4 | 4 | ||
| 5 | * ccl.c (ASCENDING_ORDER): New macro, to work around GCC bug 43772. | ||
| 6 | (GET_CCL_RANGE, IN_INT_RANGE): Use it. | ||
| 7 | |||
| 5 | * fileio.c: Don't assume EMACS_INT fits in off_t. | 8 | * fileio.c: Don't assume EMACS_INT fits in off_t. |
| 6 | (emacs_lseek): New static function. | 9 | (emacs_lseek): New static function. |
| 7 | (Finsert_file_contents, Fwrite_region): Use it. | 10 | (Finsert_file_contents, Fwrite_region): Use it. |
| @@ -745,11 +745,15 @@ while(0) | |||
| 745 | 745 | ||
| 746 | #endif | 746 | #endif |
| 747 | 747 | ||
| 748 | /* Use "&" rather than "&&" to suppress a bogus GCC warning; see | ||
| 749 | <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43772>. */ | ||
| 750 | #define ASCENDING_ORDER(lo, med, hi) (((lo) <= (med)) & ((med) <= (hi))) | ||
| 751 | |||
| 748 | #define GET_CCL_RANGE(var, ccl_prog, ic, lo, hi) \ | 752 | #define GET_CCL_RANGE(var, ccl_prog, ic, lo, hi) \ |
| 749 | do \ | 753 | do \ |
| 750 | { \ | 754 | { \ |
| 751 | EMACS_INT prog_word = XINT ((ccl_prog)[ic]); \ | 755 | EMACS_INT prog_word = XINT ((ccl_prog)[ic]); \ |
| 752 | if (! ((lo) <= prog_word && prog_word <= (hi))) \ | 756 | if (! ASCENDING_ORDER (lo, prog_word, hi)) \ |
| 753 | CCL_INVALID_CMD; \ | 757 | CCL_INVALID_CMD; \ |
| 754 | (var) = prog_word; \ | 758 | (var) = prog_word; \ |
| 755 | } \ | 759 | } \ |
| @@ -761,7 +765,7 @@ while(0) | |||
| 761 | #define GET_CCL_INT(var, ccl_prog, ic) \ | 765 | #define GET_CCL_INT(var, ccl_prog, ic) \ |
| 762 | GET_CCL_RANGE (var, ccl_prog, ic, INT_MIN, INT_MAX) | 766 | GET_CCL_RANGE (var, ccl_prog, ic, INT_MIN, INT_MAX) |
| 763 | 767 | ||
| 764 | #define IN_INT_RANGE(val) (INT_MIN <= (val) && (val) <= INT_MAX) | 768 | #define IN_INT_RANGE(val) ASCENDING_ORDER (INT_MIN, val, INT_MAX) |
| 765 | 769 | ||
| 766 | /* Encode one character CH to multibyte form and write to the current | 770 | /* Encode one character CH to multibyte form and write to the current |
| 767 | output buffer. If CH is less than 256, CH is written as is. */ | 771 | output buffer. If CH is less than 256, CH is written as is. */ |