]> git.eshelyaron.com Git - emacs.git/commitdiff
Pacify GCC 14 -Wnull-dereference in tim_sort
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 30 Apr 2024 08:20:12 +0000 (01:20 -0700)
committerEshel Yaron <me@eshelyaron.com>
Mon, 6 May 2024 16:29:35 +0000 (18:29 +0200)
* 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)

src/lisp.h
src/sort.c

index 4487948b00771f808432ad27b7f41dd5f614300b..bf928f51b174d2dde588a609d87335d6e494015f 100644 (file)
@@ -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);
index 808cd187dcf5f04905f4bf43a43945bb8e38a84e..02dad327cd49d89c2a86d6b2779076ee838b6b6f 100644 (file)
@@ -38,8 +38,6 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 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))