diff options
| author | Paul Eggert | 2017-09-17 15:25:44 -0700 |
|---|---|---|
| committer | Paul Eggert | 2017-09-17 15:26:41 -0700 |
| commit | 5f28f0db73c03b98b27e04a458ebb209b5d9acde (patch) | |
| tree | 4c431e51e3e20d6b847907d014b1aea7754f34da /src/data.c | |
| parent | 37b5e661d298cbfe51422cd515b6696a1cdaa868 (diff) | |
| download | emacs-5f28f0db73c03b98b27e04a458ebb209b5d9acde.tar.gz emacs-5f28f0db73c03b98b27e04a458ebb209b5d9acde.zip | |
Fix bug with min and max and NaNs
* src/data.c (minmax_driver): Fix bug with (min 0 NaN), which
mistakenly yielded 0. Also, pacify GCC in a better way.
* test/src/data-tests.el (data-tests-min): Test for the bug.
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/data.c b/src/data.c index 95bf06e5102..e070be6c208 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -3010,16 +3010,16 @@ static Lisp_Object | |||
| 3010 | minmax_driver (ptrdiff_t nargs, Lisp_Object *args, | 3010 | minmax_driver (ptrdiff_t nargs, Lisp_Object *args, |
| 3011 | enum Arith_Comparison comparison) | 3011 | enum Arith_Comparison comparison) |
| 3012 | { | 3012 | { |
| 3013 | eassume (0 < nargs); | 3013 | Lisp_Object accum = args[0]; |
| 3014 | Lisp_Object accum = args[0]; /* pacify GCC */ | 3014 | CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (accum); |
| 3015 | for (ptrdiff_t argnum = 0; argnum < nargs; argnum++) | 3015 | for (ptrdiff_t argnum = 1; argnum < nargs; argnum++) |
| 3016 | { | 3016 | { |
| 3017 | Lisp_Object val = args[argnum]; | 3017 | Lisp_Object val = args[argnum]; |
| 3018 | CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (val); | 3018 | CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (val); |
| 3019 | if (argnum == 0 || !NILP (arithcompare (val, accum, comparison))) | 3019 | if (!NILP (arithcompare (val, accum, comparison))) |
| 3020 | accum = val; | 3020 | accum = val; |
| 3021 | else if (FLOATP (accum) && isnan (XFLOAT_DATA (accum))) | 3021 | else if (FLOATP (val) && isnan (XFLOAT_DATA (val))) |
| 3022 | return accum; | 3022 | return val; |
| 3023 | } | 3023 | } |
| 3024 | return accum; | 3024 | return accum; |
| 3025 | } | 3025 | } |