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