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