aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorPaul Eggert2017-09-17 15:25:44 -0700
committerPaul Eggert2017-09-17 15:26:41 -0700
commit5f28f0db73c03b98b27e04a458ebb209b5d9acde (patch)
tree4c431e51e3e20d6b847907d014b1aea7754f34da /src/data.c
parent37b5e661d298cbfe51422cd515b6696a1cdaa868 (diff)
downloademacs-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.c12
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
3010minmax_driver (ptrdiff_t nargs, Lisp_Object *args, 3010minmax_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}