Subject: [PATCH] Pacify GCC 15 -Wunterminated-string-initialization warnings
From: Collin Funk <[email-masked]>
To: [email-masked]
Date: Tue, 15 Apr 2025 22:24:16 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

GCC 15.0 enables -Wunterminated-string-initialization when using
'-Wall -Wextra', which gets used when I run './configure'. This patch
silences the warnings:

fns.c: In function ‘hexbuf_digest’:
fns.c:6019:40: warning: initializer-string for array of ‘char’ truncates NUL terminator but destination lacks ‘nonstring’ attribute (17 chars into 16 available) [-Wunterminated-string-initialization]
 6019 |       static char const hexdigit[16] = "0123456789abcdef";
      |                                        ^~~~~~~~~~~~~~~~~~

Collin

From 1df4a867e9440885a5de846eb6fcd17e327fc328 Mon Sep 17 00:00:00 2001
From: Collin Funk <[email-masked]>
Date: Tue, 15 Apr 2025 22:14:53 -0700
Subject: [PATCH] Pacify GCC 15 -Wunterminated-string-initialization warnings

* src/fns.c: Include <attribute.h>.
(hexbuf_digest): Mark a variable with ATTRIBUTE_NONSTRING.
* src/json.c: Include <attribute.h>.
(json_out_string): Mark a variable with ATTRIBUTE_NONSTRING.
---
 src/fns.c  | 3 ++-
 src/json.c | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/fns.c b/src/fns.c
index 3f109a81836..94367d69557 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -19,6 +19,7 @@ Copyright (C) 1985-2025 Free Software Foundation, Inc.
 
 #include <config.h>
 
+#include <attribute.h>
 #include <stdlib.h>
 #include <sys/random.h>
 #include <unistd.h>
@@ -6016,7 +6017,7 @@ hexbuf_digest (char *hexbuf, void const *digest, int digest_size)
 
   for (int i = digest_size - 1; i >= 0; i--)
     {
-      static char const hexdigit[16] = "0123456789abcdef";
+      static char const hexdigit[16] ATTRIBUTE_NONSTRING = "0123456789abcdef";
       int p_i = p[i];
       hexbuf[2 * i] = hexdigit[p_i >> 4];
       hexbuf[2 * i + 1] = hexdigit[p_i & 0xf];
diff --git a/src/json.c b/src/json.c
index 5795c582ce0..7a34a5042c6 100644
--- a/src/json.c
+++ b/src/json.c
@@ -19,6 +19,7 @@ Copyright (C) 2017-2025 Free Software Foundation, Inc.
 
 #include <config.h>
 
+#include <attribute.h>
 #include <errno.h>
 #include <stddef.h>
 #include <stdint.h>
@@ -323,7 +324,7 @@ json_out_string (json_out_t *jo, Lisp_Object str, int skip)
 {
   /* FIXME: this code is slow, make faster! */
 
-  static const char hexchar[16] = "0123456789ABCDEF";
+  static const char hexchar[16] ATTRIBUTE_NONSTRING = "0123456789ABCDEF";
   ptrdiff_t len = SBYTES (str);
   json_make_room (jo, len + 2);
   json_out_byte (jo, '"');
-- 
2.49.0