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