git: dc28e6534b14 - stable/15 - cdefs.h: Introduce __nonstring attribute

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Mon, 29 Dec 2025 11:59:05 UTC
The branch stable/15 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=dc28e6534b14f1fdbefb1d9ebebce9e9b22197ab

commit dc28e6534b14f1fdbefb1d9ebebce9e9b22197ab
Author:     Alex Richardson <arichardson@FreeBSD.org>
AuthorDate: 2025-12-16 18:03:44 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2025-12-29 11:41:14 +0000

    cdefs.h: Introduce __nonstring attribute
    
    This attribute can be used to annotate char arrays that are not supposed to
    be terminated with a NUL char and is needed to silence clang's new
    -Wunterminated-string-initialization warning. The name matches linuxkpi.
    
    Reviewed by:    emaste, jhb
    MFC after:      1 week
    Differential Revision: https://reviews.freebsd.org/D52565
    
    (cherry picked from commit 802c6d5d61d15494a54a386dc2ffbcfefc68c8ab)
---
 sys/sys/cdefs.h                                    | 7 +++++++
 tools/build/cross-build/include/common/sys/cdefs.h | 8 ++++++++
 2 files changed, 15 insertions(+)

diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h
index 3bc4389346d2..ea6a92ad0056 100644
--- a/sys/sys/cdefs.h
+++ b/sys/sys/cdefs.h
@@ -394,6 +394,13 @@
 #define	__printf0like(fmtarg, firstvararg)
 #endif
 
+/* To silence warnings about null terminator not fitting into an array. */
+#if __has_attribute(__nonstring__)
+#define	__nonstring	__attribute__((__nonstring__))
+#else
+#define	__nonstring
+#endif
+
 #define	__strong_reference(sym,aliassym)	\
 	extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
 #ifdef __STDC__
diff --git a/tools/build/cross-build/include/common/sys/cdefs.h b/tools/build/cross-build/include/common/sys/cdefs.h
index 3f9b7866141f..8419b53135f6 100644
--- a/tools/build/cross-build/include/common/sys/cdefs.h
+++ b/tools/build/cross-build/include/common/sys/cdefs.h
@@ -100,6 +100,14 @@
 	__attribute__((__format__(__printf0__, fmtarg, firstvararg)))
 #endif
 
+#ifndef __nonstring
+#if __has_attribute(__nonstring__)
+#define	__nonstring	__attribute__((__nonstring__))
+#else
+#define	__nonstring
+#endif
+#endif
+
 #ifndef __predict_true
 #define __predict_true(exp) __builtin_expect((exp), 1)
 #endif