diff options
| author | Paul Eggert <eggert@cs.ucla.edu> | 2017-09-17 15:25:44 -0700 |
|---|---|---|
| committer | Paul Eggert <eggert@cs.ucla.edu> | 2017-09-17 15:26:41 -0700 |
| commit | 5f28f0db73c03b98b27e04a458ebb209b5d9acde (patch) | |
| tree | 4c431e51e3e20d6b847907d014b1aea7754f34da /src | |
| parent | 37b5e661d298cbfe51422cd515b6696a1cdaa868 (diff) | |
| download | emacs-5f28f0db73c03b98b27e04a458ebb209b5d9acde.tar.gz | |
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')
| -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 minmax_driver (ptrdiff_t nargs, Lisp_Object *args, enum Arith_Comparison comparison) { - eassume (0 < nargs); - Lisp_Object accum = args[0]; /* pacify GCC */ - for (ptrdiff_t argnum = 0; argnum < nargs; argnum++) + Lisp_Object accum = args[0]; + CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (accum); + for (ptrdiff_t argnum = 1; argnum < nargs; argnum++) { Lisp_Object val = args[argnum]; CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (val); - if (argnum == 0 || !NILP (arithcompare (val, accum, comparison))) + if (!NILP (arithcompare (val, accum, comparison))) accum = val; - else if (FLOATP (accum) && isnan (XFLOAT_DATA (accum))) - return accum; + else if (FLOATP (val) && isnan (XFLOAT_DATA (val))) + return val; } return accum; } |
