Page MenuHomeFreeBSD

D53967.diff
No OneTemporary

D53967.diff

diff --git a/include/stddef.h b/include/stddef.h
--- a/include/stddef.h
+++ b/include/stddef.h
@@ -61,6 +61,10 @@
#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
--- a/share/man/man3/Makefile
+++ b/share/man/man3/Makefile
@@ -35,7 +35,8 @@
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
--- 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 @@
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
--- /dev/null
+++ b/share/man/man3/unreachable.3
@@ -0,0 +1,89 @@
+.\"
+.\" Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org>
+.\"
+.\" 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 fuz@FreeBSD.org

File Metadata

Mime Type
text/plain
Expires
Tue, Jun 23, 2:32 AM (9 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34226084
Default Alt Text
D53967.diff (2 KB)

Event Timeline