diff --git a/src/lisp.h b/src/lisp.h index 4487948b007..bf928f51b17 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -4301,7 +4301,8 @@ extern void mark_fns (void); /* Defined in sort.c */ extern void tim_sort (Lisp_Object, Lisp_Object, Lisp_Object *, const ptrdiff_t, - bool); + bool) + ARG_NONNULL ((3)); /* Defined in floatfns.c. */ verify (FLT_RADIX == 2 || FLT_RADIX == 16); diff --git a/src/sort.c b/src/sort.c index 808cd187dcf..02dad327cd4 100644 --- a/src/sort.c +++ b/src/sort.c @@ -38,8 +38,6 @@ along with GNU Emacs. If not, see . */ static void reverse_slice(Lisp_Object *lo, Lisp_Object *hi) { - eassert (lo && hi); - --hi; while (lo < hi) { Lisp_Object t = *lo; @@ -1095,7 +1093,7 @@ tim_sort (Lisp_Object predicate, Lisp_Object keyfunc, Lisp_Object *allocated_keys = NULL; merge_state ms; - if (reverse) + if (reverse && 0 < length) reverse_slice (seq, seq + length); /* preserve stability */ if (NILP (keyfunc))