aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2024-04-30 01:20:12 -0700
committerPaul Eggert2024-04-30 01:26:23 -0700
commitc2b2a38f70f6c4639903a014db5b835b37669ea7 (patch)
tree8255bd14c436e9c7d17a9d4dae6e217a5042b793 /src
parent009a6ba71ea6741371e4799bdb475235a5b6da90 (diff)
downloademacs-c2b2a38f70f6c4639903a014db5b835b37669ea7.tar.gz
emacs-c2b2a38f70f6c4639903a014db5b835b37669ea7.zip
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].
Diffstat (limited to 'src')
-rw-r--r--src/lisp.h3
-rw-r--r--src/sort.c4
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);
4301 4301
4302/* Defined in sort.c */ 4302/* Defined in sort.c */
4303extern void tim_sort (Lisp_Object, Lisp_Object, Lisp_Object *, const ptrdiff_t, 4303extern void tim_sort (Lisp_Object, Lisp_Object, Lisp_Object *, const ptrdiff_t,
4304 bool); 4304 bool)
4305 ARG_NONNULL ((3));
4305 4306
4306/* Defined in floatfns.c. */ 4307/* Defined in floatfns.c. */
4307verify (FLT_RADIX == 2 || FLT_RADIX == 16); 4308verify (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/>. */
38static void 38static void
39reverse_slice(Lisp_Object *lo, Lisp_Object *hi) 39reverse_slice(Lisp_Object *lo, Lisp_Object *hi)
40{ 40{
41 eassert (lo && hi);
42
43 --hi; 41 --hi;
44 while (lo < hi) { 42 while (lo < hi) {
45 Lisp_Object t = *lo; 43 Lisp_Object t = *lo;
@@ -1095,7 +1093,7 @@ tim_sort (Lisp_Object predicate, Lisp_Object keyfunc,
1095 Lisp_Object *allocated_keys = NULL; 1093 Lisp_Object *allocated_keys = NULL;
1096 merge_state ms; 1094 merge_state ms;
1097 1095
1098 if (reverse) 1096 if (reverse && 0 < length)
1099 reverse_slice (seq, seq + length); /* preserve stability */ 1097 reverse_slice (seq, seq + length); /* preserve stability */
1100 1098
1101 if (NILP (keyfunc)) 1099 if (NILP (keyfunc))