emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master c2b2a38f70f 07/11: Pacify GCC 14 -Wnull-dereference in tim_sort


From: Paul Eggert
Subject: master c2b2a38f70f 07/11: Pacify GCC 14 -Wnull-dereference in tim_sort
Date: Tue, 30 Apr 2024 04:26:37 -0400 (EDT)

branch: master
commit c2b2a38f70f6c4639903a014db5b835b37669ea7
Author: Paul Eggert <eggert@cs.ucla.edu>
Commit: Paul Eggert <eggert@cs.ucla.edu>

    Pacify GCC 14 -Wnull-dereference in tim_sort
    
    * 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].
---
 src/lisp.h | 3 ++-
 src/sort.c | 4 +---
 2 files changed, 3 insertions(+), 4 deletions(-)

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 
<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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]