* src/lisp.h (tim_sort): Require array arg to be nonnull.
* src/sort.c (reverse_slice): Omit no-longer-needed eassert.
(tim_sort): Avoid undefined behavior when length == 0,
since reverse_slice would then compute &seq[-1].
(cherry picked from commit
c2b2a38f70f6c4639903a014db5b835b37669ea7)
/* 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);
static void
reverse_slice(Lisp_Object *lo, Lisp_Object *hi)
{
- eassert (lo && hi);
-
--hi;
while (lo < hi) {
Lisp_Object t = *lo;
Lisp_Object *allocated_keys = NULL;
merge_state ms;
- if (reverse)
+ if (reverse && 0 < length)
reverse_slice (seq, seq + length); /* preserve stability */
if (NILP (keyfunc))