xref: /freebsd/share/man/man3/unreachable.3 (revision b381d0980221b476cadbef862a8e5973d675fb7a)
1*b381d098SRobert Clausecker.\"
2*b381d098SRobert Clausecker.\" Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org>
3*b381d098SRobert Clausecker.\"
4*b381d098SRobert Clausecker.\" SPDX-License-Identifier: BSD-2-Clause
5*b381d098SRobert Clausecker.\"
6*b381d098SRobert Clausecker.Dd November 27, 2025
7*b381d098SRobert Clausecker.Dt UNREACHABLE 3
8*b381d098SRobert Clausecker.Os
9*b381d098SRobert Clausecker.Sh NAME
10*b381d098SRobert Clausecker.Nm unreachable
11*b381d098SRobert Clausecker.Nd the unreachable macro
12*b381d098SRobert Clausecker.Sh SYNOPSIS
13*b381d098SRobert Clausecker.In stddef.h
14*b381d098SRobert Clausecker.Fd #define unreachable()
15*b381d098SRobert Clausecker.Sh DESCRIPTION
16*b381d098SRobert ClauseckerIf the
17*b381d098SRobert Clausecker.Fn unreachable
18*b381d098SRobert Clauseckermacro is reached during execution, behavior is undefined.
19*b381d098SRobert ClauseckerThis can be useful to hint to the compiler that some invariant is guaranteed to
20*b381d098SRobert Clauseckerhold or that some case cannot occur.
21*b381d098SRobert Clausecker.Sh EXAMPLES
22*b381d098SRobert ClauseckerSuppose a floating-point number
23*b381d098SRobert Clausecker.Va x
24*b381d098SRobert Clauseckeris to be classified using the
25*b381d098SRobert Clausecker.Xr fpclassify 3
26*b381d098SRobert Clauseckermacro and a different action is to be taken based on the result of the
27*b381d098SRobert Clauseckerclassification.
28*b381d098SRobert ClauseckerAs the set of possible return values is known, the
29*b381d098SRobert Clausecker.Fn unreachable
30*b381d098SRobert Clauseckermacro can be used to hint to the compiler that it can omit checks for
31*b381d098SRobert Clauseckerother possible return values:
32*b381d098SRobert Clausecker.Bd -literal -offset 3n
33*b381d098SRobert Clausecker#include <math.h>
34*b381d098SRobert Clausecker#include <stddef.h>
35*b381d098SRobert Clausecker#include <stdio.h>
36*b381d098SRobert Clausecker
37*b381d098SRobert Clauseckervoid print_classification(double x)
38*b381d098SRobert Clausecker{
39*b381d098SRobert Clausecker	printf("%f: ", x);
40*b381d098SRobert Clausecker
41*b381d098SRobert Clausecker	switch (fpclassify(x)) {
42*b381d098SRobert Clausecker	case FP_INFINITE:
43*b381d098SRobert Clausecker		puts("infinite");
44*b381d098SRobert Clausecker		break;
45*b381d098SRobert Clausecker
46*b381d098SRobert Clausecker	case FP_NAN:
47*b381d098SRobert Clausecker		puts("not a number");
48*b381d098SRobert Clausecker		break;
49*b381d098SRobert Clausecker
50*b381d098SRobert Clausecker	case FP_NORMAL:
51*b381d098SRobert Clausecker		puts("normal");
52*b381d098SRobert Clausecker		break;
53*b381d098SRobert Clausecker
54*b381d098SRobert Clausecker	case FP_SUBNORMAL:
55*b381d098SRobert Clausecker		puts("subnormal");
56*b381d098SRobert Clausecker		break;
57*b381d098SRobert Clausecker
58*b381d098SRobert Clausecker	case FP_ZERO:
59*b381d098SRobert Clausecker		puts("zero");
60*b381d098SRobert Clausecker		break;
61*b381d098SRobert Clausecker
62*b381d098SRobert Clausecker	default:
63*b381d098SRobert Clausecker		unreachable();
64*b381d098SRobert Clausecker}
65*b381d098SRobert Clausecker.Ed
66*b381d098SRobert Clausecker.Sh SEE ALSO
67*b381d098SRobert Clausecker.Xr assert 3
68*b381d098SRobert Clausecker.Sh STANDARDS
69*b381d098SRobert ClauseckerThe
70*b381d098SRobert Clausecker.Fn unreachable
71*b381d098SRobert Clauseckermacro conforms to
72*b381d098SRobert Clausecker.St -isoC-2023 .
73*b381d098SRobert Clausecker.Sh HISTORY
74*b381d098SRobert ClauseckerA
75*b381d098SRobert Clausecker.Dv /*NOTREACHED*/
76*b381d098SRobert Clauseckerconventional comment was supported by the historical
77*b381d098SRobert Clausecker.Xr lint 1
78*b381d098SRobert Clauseckerutility to suppress warnings about unreachable statements during static
79*b381d098SRobert Clauseckeranalysis.
80*b381d098SRobert ClauseckerThe
81*b381d098SRobert Clausecker.Fn unreachable
82*b381d098SRobert Clauseckermacro was added in
83*b381d098SRobert Clausecker.Fx 15.1
84*b381d098SRobert Clauseckerbased on the earlier private
85*b381d098SRobert Clausecker.Fn __unreachable
86*b381d098SRobert Clauseckermacro for compliance with
87*b381d098SRobert Clausecker.St -isoC-2023 .
88*b381d098SRobert Clausecker.Sh AUTHOR
89*b381d098SRobert Clausecker.Ah Robert Clausecker Aq Mt fuz@FreeBSD.org
90