The branch main has been updated by fuz:

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

commit b381d0980221b476cadbef862a8e5973d675fb7a
Author:     Robert Clausecker <[email protected]>
AuthorDate: 2025-11-27 20:19:49 +0000
Commit:     Robert Clausecker <[email protected]>
CommitDate: 2025-11-28 15:56:49 +0000

    stddef.h: add unreachable() for C23 compliance
    
    unreachable() is a hint to the compiler that it is unreachable.
    Add a new man page unreachable(3) to document this macro.
    
    Reviewed by:    imp
    Approved by:    markj (mentor)
    MFC after:      1 month
    Differential Revision:  https://reviews.freebsd.org/D53967
---
 include/stddef.h             |  4 ++
 share/man/man3/Makefile      |  3 +-
 share/man/man3/assert.3      |  5 ++-
 share/man/man3/unreachable.3 | 89 ++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 98 insertions(+), 3 deletions(-)

diff --git a/include/stddef.h b/include/stddef.h
index 3ba9a9946b01..2ac8e9fe3f77 100644
--- a/include/stddef.h
+++ b/include/stddef.h
@@ -61,6 +61,10 @@ typedef      __max_align_t   max_align_t;
 #endif
 #endif
 
+#if __ISO_C_VISIBLE >= 2023
+#define unreachable(x) __unreachable(x)
+#endif
+
 #ifndef offsetof
 #define        offsetof(type, field)   __builtin_offsetof(type, field)
 #endif
diff --git a/share/man/man3/Makefile b/share/man/man3/Makefile
index bce57291f073..e5e790194ffc 100644
--- a/share/man/man3/Makefile
+++ b/share/man/man3/Makefile
@@ -35,7 +35,8 @@ MAN=          alloca.3 \
                sysexits.3 \
                tgmath.3 \
                timeradd.3 \
-               tree.3
+               tree.3 \
+               unreachable.3
 
 MLINKS=                arb.3 ARB8_ENTRY.3 \
                arb.3 ARB8_HEAD.3 \
diff --git a/share/man/man3/assert.3 b/share/man/man3/assert.3
index f219aa1d6743..cbaedb49010a 100644
--- a/share/man/man3/assert.3
+++ b/share/man/man3/assert.3
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd April 20, 2021
+.Dd November 27, 2025
 .Dt ASSERT 3
 .Os
 .Sh NAME
@@ -118,7 +118,8 @@ constraint and includes the provided string literal:
 If none is provided, it only points at the constraint.
 .Sh SEE ALSO
 .Xr abort2 2 ,
-.Xr abort 3
+.Xr abort 3 ,
+.Xr unreachable 3
 .Sh STANDARDS
 The
 .Fn assert
diff --git a/share/man/man3/unreachable.3 b/share/man/man3/unreachable.3
new file mode 100644
index 000000000000..8a1c2d142578
--- /dev/null
+++ b/share/man/man3/unreachable.3
@@ -0,0 +1,89 @@
+.\"
+.\" Copyright (c) 2025 Robert Clausecker <[email protected]>
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.Dd November 27, 2025
+.Dt UNREACHABLE 3
+.Os
+.Sh NAME
+.Nm unreachable
+.Nd the unreachable macro
+.Sh SYNOPSIS
+.In stddef.h
+.Fd #define unreachable()
+.Sh DESCRIPTION
+If the
+.Fn unreachable
+macro is reached during execution, behavior is undefined.
+This can be useful to hint to the compiler that some invariant is guaranteed to
+hold or that some case cannot occur.
+.Sh EXAMPLES
+Suppose a floating-point number
+.Va x
+is to be classified using the
+.Xr fpclassify 3
+macro and a different action is to be taken based on the result of the
+classification.
+As the set of possible return values is known, the
+.Fn unreachable
+macro can be used to hint to the compiler that it can omit checks for
+other possible return values:
+.Bd -literal -offset 3n
+#include <math.h>
+#include <stddef.h>
+#include <stdio.h>
+
+void print_classification(double x)
+{
+       printf("%f: ", x);
+
+       switch (fpclassify(x)) {
+       case FP_INFINITE:
+               puts("infinite");
+               break;
+
+       case FP_NAN:
+               puts("not a number");
+               break;
+
+       case FP_NORMAL:
+               puts("normal");
+               break;
+
+       case FP_SUBNORMAL:
+               puts("subnormal");
+               break;
+
+       case FP_ZERO:
+               puts("zero");
+               break;
+
+       default:
+               unreachable();
+}
+.Ed
+.Sh SEE ALSO
+.Xr assert 3
+.Sh STANDARDS
+The
+.Fn unreachable
+macro conforms to
+.St -isoC-2023 .
+.Sh HISTORY
+A
+.Dv /*NOTREACHED*/
+conventional comment was supported by the historical
+.Xr lint 1
+utility to suppress warnings about unreachable statements during static
+analysis.
+The
+.Fn unreachable
+macro was added in
+.Fx 15.1
+based on the earlier private
+.Fn __unreachable
+macro for compliance with
+.St -isoC-2023 .
+.Sh AUTHOR
+.Ah Robert Clausecker Aq Mt [email protected]

Reply via email to