From nobody Fri Nov 28 15:57:50 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dHycZ6q3nz6Hkdr for ; Fri, 28 Nov 2025 15:57:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dHycZ4ZZdz4FCy for ; Fri, 28 Nov 2025 15:57:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1764345470; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WM6NSFJh68HQsYa4DqE72QwPfKqEF0grx+P5eQ9MbD0=; b=bId2cQXWbmO9hB+gMwjIuNSkcSqhbKkanEIJmlXsYI3cp6qTtPnUcU9NWoKn4iDTlNjQ+C +rh4e2NSzZWhBCXJOmxwqYZmhqUnbrQq3BOfn6izxHxbYGGxDqXdH30JFBpFm18/Q8hdHL 0VXoCZARy4cz3+tQjwswx2gox8KbAIi0s/N6Lpvt8OxJtFKHlbqpG8KsSKOXkRJhcEjGpA urd2VzjnAlwJfIPynWynMcgIz3D2KA7mIr0ugivxjpFY1lrP8/igKHgPAkaiB6YqTij89c UVL/+5sXLga23nxr8RjoTONOVGATfdYnvHu7t3PkbxG5zAgnjFBXXgt1Clii/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1764345470; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WM6NSFJh68HQsYa4DqE72QwPfKqEF0grx+P5eQ9MbD0=; b=Q0VTiuGMcQ78z9qqwS1gGO06bgpxiKlaK6Q86QNPkzrHnNs427wsseVEM3oIh1lNkkXmVj 7OkAhf2fwGrGY17T4sD7b1xT1c4GG4yx0qp0IiAlHKZPP12hoJ+wwn83vtwopBc26FXud7 +6mLMgdqE56rsYaYEYguTavory8+DW7E5BUw0IsD5JfWhnPxnoUitLFTVd8QHpCN9rqXPr k1eeiNCzp+KIv7TEjm9kAMKszQ6rX9VRRj0e4/zdtJJIwWFkl4Kn0YpW4qj6104Z0M6f0h 4LQ7eLl9gcFfoLs6YICf/drEEZ2MvWYRhPRuuW87xPgoIN7Ccub0zoHzulaJlA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1764345470; a=rsa-sha256; cv=none; b=Zg+lchkBRZ5Ga1L5wKYr5hLrsLSwsMQeppylz3rvtXFAWzz3kN8ECVCrhiBjWA51hn7kOw jqS6EJ2mtKcIhQW817ChVtRqmD/OJyReI5cjowphw3qPU/q8Lwg+K2IAd0SbOYsyL5wxYc ZwxMETir6v6P1vzAavekUtMCq5L77casC6pyxnJsS8WRkVEHKiJvcig2Xcv1JXJ/S9EFqu b1p+3mutxe3a1IfvCkjHQ8RADqMUOHldER6+XLwKLLyUUTOIwxubGwIUWyyWi04zdrKda+ p5zisLlBEGfpR9grBSwTfMdEroHLDyvXAL8m1Pf18eYV6OAAKsP0oVepvJxCbg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dHycZ472Xz17p7 for ; Fri, 28 Nov 2025 15:57:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 30e32 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 28 Nov 2025 15:57:50 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Robert Clausecker Subject: git: b381d0980221 - main - stddef.h: add unreachable() for C23 compliance List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: fuz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b381d0980221b476cadbef862a8e5973d675fb7a Auto-Submitted: auto-generated Date: Fri, 28 Nov 2025 15:57:50 +0000 Message-Id: <6929c67e.30e32.51dd4352@gitrepo.freebsd.org> The branch main has been updated by fuz: URL: https://cgit.FreeBSD.org/src/commit/?id=b381d0980221b476cadbef862a8e5973d675fb7a commit b381d0980221b476cadbef862a8e5973d675fb7a Author: Robert Clausecker AuthorDate: 2025-11-27 20:19:49 +0000 Commit: Robert Clausecker CommitDate: 2025-11-28 15:56:49 +0000 stddef.h: add unreachable() for C23 compliance unreachable() is a hint to the compiler that it is unreachable. Add a new man page unreachable(3) to document this macro. Reviewed by: imp Approved by: markj (mentor) MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D53967 --- include/stddef.h | 4 ++ share/man/man3/Makefile | 3 +- share/man/man3/assert.3 | 5 ++- share/man/man3/unreachable.3 | 89 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 3 deletions(-) diff --git a/include/stddef.h b/include/stddef.h index 3ba9a9946b01..2ac8e9fe3f77 100644 --- a/include/stddef.h +++ b/include/stddef.h @@ -61,6 +61,10 @@ typedef __max_align_t max_align_t; #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 index bce57291f073..e5e790194ffc 100644 --- a/share/man/man3/Makefile +++ b/share/man/man3/Makefile @@ -35,7 +35,8 @@ MAN= alloca.3 \ 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 index f219aa1d6743..cbaedb49010a 100644 --- 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 @@ constraint and includes the provided string literal: 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 index 000000000000..8a1c2d142578 --- /dev/null +++ b/share/man/man3/unreachable.3 @@ -0,0 +1,89 @@ +.\" +.\" Copyright (c) 2025 Robert Clausecker +.\" +.\" 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 +#include +#include + +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