From patchwork Fri May 24 21:58:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 49209 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:542:0:b0:460:55fa:d5ed with SMTP id 63csp2015499vqf; Fri, 24 May 2024 14:58:54 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWdgYcZ4kiShcqEhnQT3Fij30QAHCledp3Y/4vn2RfXjN3j/mCvExMFBy36yEYaq1MKVVX5D/nxeSEWVxSDWW/en7tOJ33CExC41A== X-Google-Smtp-Source: AGHT+IEVSI0L85looygiUI0NfVTPzP0OhLXUA07uwW6DZn0WkfyGkfKV6ec5AlSNDSaZT8cUk4NY X-Received: by 2002:a17:906:19cc:b0:a62:615d:47b3 with SMTP id a640c23a62f3a-a62643e9c10mr224688566b.34.1716587934185; Fri, 24 May 2024 14:58:54 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a626c800dc1si121609066b.79.2024.05.24.14.58.53; Fri, 24 May 2024 14:58:54 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=R4NVBzus; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6E5BC68D581; Sat, 25 May 2024 00:58:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03olkn2066.outbound.protection.outlook.com [40.92.59.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 403BD68D37F for ; Sat, 25 May 2024 00:58:44 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iWlYpNxrGrwmHb0x4zPgzKmCX2N9gPvjdx6oIK58S4p+7+arYPFpIpm5O4AuzeK5X+H3su662P2M+YqgdzVESFIUHJki9BCf3kqL8wdCgT3IfLovj44aIunCF1evXgIntUUP1rlOIzG+tY3s8bLSzQT13eeCZgYyfkTdLy+BhfoSc4HGGT28xNHGCkU4BNUrXS1xPL5sWzn/DkiLO34DlqMV7rqCWhiuvlK2pHLAxgqDuwVt1WGLjb6Mtc1C3H/meS24AwCqUwO9Q0/LqtgeITLHB/h19uYAU+onL9rqjlEwKpzS2mjp0AYz6lcqwLYFEKnR2CWLBGTVpNV4CLtAxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RRgBELnuPXLhfDJAx+jFey24jlGPGviiD5N/2jHl4gs=; b=h+JvHVwAHYRX1xeTL9kgO+J3w/Sbt9GLEOKOGNcYshYK4/470hSY0sBldpnC2QDbqhwWcfuVqGCcMA9zcdA2JFAV1lNW+scR7Z0wV/BWNQYuzJMR/r2cqPR3bbxcAlqb8yA9mvcW9z3hwnt2lJaRDqbSXALDS2HV9tLGrLnnyn143e99Xe/2foxwVH7SOSas0fBvAmCYUBJ/YXgb0K1P78iLBYIEFS5RQh1TqT4LSofLDEdDHUKeJSocKwWPWB3a95errMEKzSf72RuqKuUuzl++ZAq1myUcesrdOJstPEK7W8sPVePQbOdrixOxV9Tetc/DxtthQanXcWh+KoZX+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RRgBELnuPXLhfDJAx+jFey24jlGPGviiD5N/2jHl4gs=; b=R4NVBzusXmDkWtNXEk7OXJTiOyJjnZVVcCm9scyl/4cVcE4jtx26/YUt96oOuPOktNb1dR10SSjOLUtEHGd3Op8MQLriQG0CNgHsXl1cScxVjYHwS+Kjbt/j89KBzmu8tH9tA0p8LBkTTGgt4RjqRP17L1Z9PuaVjbVyNWPpHPWqZcc6oeJBvyy6MT7+Ei+uDhy/JiVFeGGKZCBdPlZFY+Yo3Gijw9x+tteke0q2E2P+XrKGNC9z2IC+Q+K9PkZiQb7yAadu8RcywnjBEsOE3Y8xIEqUEr9We6c9vGtsOg3PhsJuAhtCnbvYtHnLcBlvlu5bIdlEdx6g1PBBP3Cjwg== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AM8P250MB0140.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:323::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.27; Fri, 24 May 2024 21:58:42 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9%4]) with mapi id 15.20.7611.016; Fri, 24 May 2024 21:58:42 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 May 2024 23:58:21 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 X-TMN: [Eq/jcg/djSVjHBNQFVALxByZxbrCnN2XLLWM+DyZkT8=] X-ClientProxiedBy: ZRAP278CA0012.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::22) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240524215832.1276263-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AM8P250MB0140:EE_ X-MS-Office365-Filtering-Correlation-Id: 10122cb4-842d-4f84-67d7-08dc7c3cacd8 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|440099019|3412199016|1710799017; X-Microsoft-Antispam-Message-Info: ecVAfLgm85V/9/GYXoebVGMioLpzF0iB78P5sAPi4O6IIu/XtP3Olc2D/dK+RqBo6gHxkMDYfzuVtbwSTUeYumigBco81VbzLGDgYsdXCyC48T9f6APtUwiTtFHnFcAAR1DNDRutGcGAcutzLApwqc1c0NKvgP/qQ3nvtyk0LjwC6VXyL8fsQWvEobRYbGUsHE4PuVTklvvurIC50buyXPIF7k4gp0nYullcvA0sdHs2Q9wWOWZCWz/7nWfVYY4OYy16SoCbyMPlvustT5+L/8CAJ/N55BImKr3xqzVjBVVANAXETCXm2mWLOwdSExKdoO+T15WYGyn/B+OyKYfYWOAm3GObShsFzg6TbOSX0nD2T9aV96Qofqahh6Lx95KMe3iTM8jkMYJsvAFNG1U3wJ284Kdih8OlpsKSL0O4MplvN3kto1ikwvAV7qDUQKS8kVCpYC6c6qDj5HynbM5uFdxZGDt8ua8221vuWpZDjTrg8Dl1pJ60IEc3vtLxsf76YoEwAwE6bGmE8VWZyTvNTc0JmkV/vsuVuKztelmicyHsqUJFhDN2+D4Vqu+kiKlG1lc8QwBt3B0v3qenmqi13TURKK62bYe/ADmbPstmtvjswXt0Ew4g3hH/Q2GW9jAH X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: zmQoHnMAbRmwuLx48neZuEtu2rvTd8smVggzEcYcOVV/ZHclMZjuZbITFiADdAhzjW0YBhkfnZwMcpYilarGtCCwOTJDbKAKDagWaZQs8GtUqqFKxU0IBDcnRRvmNL4PfX7RQLjrx9GH3zT0P5MX9NHJyu05G1BHdk4/VwhdsSABmpaYT0Ft3rni3ui6HEAeSF/0sFb+FhWotAjWZDFZ41AYfx7S4hOrw2nizMqkQIOvFAnohcoCMdeBn3/aLkVwe0VRlSn04SbB4aqFd59uqLD7IJ+ELwUjlJKx+5zWPtJCINe2cLygmiINM32M6qsmDILV9C7tlblUh+Vlyb3tvUnMhKpDo6L5zP9tHKXWbuuxQ57+7AtqTD18m+nl3tZoitdrT/jd72nSU9p5Kjb+pHEQuwbrXhaikHsIf867PNvkBxRmbMLyLA+W+YRvHD+99mpgzZcTEEJl5RJbqkhwktrkIK8Z4C22l3hYYiEt+m5R/V4WFn5fl7REIx5JJ9h/DTJUzS+j6YIdf6ta+0Pekhkz7aOhjKh6ysL3lWbC+fc6IkDpr4+WoDMzbwBuiiEKhLrrpPozwa/ncDwOIH8oE07QS121jnrAfDN7OP+gTjYaYGKcf2C1+MEvlBjpe6N0RJnkPgyxAG9Kkgt2G8kPWiihFmB5E4F0rwUAuRi7Hk77g/NnuW11haV90ASun7JUhEZR1NqqDfp6v4JOaHibzarfhNJcdY2c+cmM84RvG2F8/mb7QBtRIZMciGWaZeCeI0ppxfHfF41nMuYhhigZsypM0FpOkMXrB01fI170kg/4LC7xix1BTpsbQF4zrsyZ4bICqxGdxOOOy90Su0yxBjTNnq1ZXmb7sEAF8gfJVDCebx9rCT2GtEuseSxeBi6tp3RAEiUrac/yQI50t9rKya6A7xKDDml7NWDFpBZHF9OlddfUNMzqXW/xBukg1S1ut0sfGD4Jhz7qKcT6HuK9/GYKqoYXLR/TsENk/D01dR5TxJ7oppFAHedhJGHQzN6Ax1bG6OCrfROthdNxoCQ07WFGi9Da5nk9eMBYk7URrCJiS1WjhVRgFzMvorCZ8++z7xBNhx8v4k3/+ZoXlUC4wDeX0gPuNzlLGE26a5PYUcMjqGArdCsqmfLQ1NTjDD4DAGCgoaKtqTxCakktdrHJC9YOCigg4Bs4Ix+3CRDSrQ/CZR8yJ4eIVoyB7sobccmvnmA1Wl6BkJRJYPEf4iTivFa179sewX+teeYfA5V/zPp0+hiSpmgu0I1ILaoz1v/xk6LbrrnutPQ7jalWLcM80g== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10122cb4-842d-4f84-67d7-08dc7c3cacd8 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2024 21:58:42.1781 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8P250MB0140 Subject: [FFmpeg-devel] [PATCH 01/12] avutil/avassert: Add av_unreachable and av_assume() macros X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: VLLY2/OanyNc Useful to let the compiler and static analyzers know that something is unreachable without adding an av_assert (which would be either dead for the compiler or add runtime overhead) for this. Signed-off-by: Andreas Rheinhardt --- I can add more macros if it is desired to differentiate between ASSERT_LEVEL == 1 and ASSERT_LEVEL > 1. doc/APIchanges | 3 +++ libavutil/avassert.h | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/doc/APIchanges b/doc/APIchanges index 60f056b863..5a3ae37999 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2024-03-07 API changes, most recent first: +2024-05-24 - xxxxxxxxxx - lavu 59.xx.100 - avassert.h + Add av_unreachable and av_assume() macros. + 2024-05-23 - xxxxxxxxxx - lavu 59.20.100 - channel_layout.h Add av_channel_layout_ambisonic_order(). diff --git a/libavutil/avassert.h b/libavutil/avassert.h index 1895fb7551..41e29c7687 100644 --- a/libavutil/avassert.h +++ b/libavutil/avassert.h @@ -31,6 +31,7 @@ #ifdef HAVE_AV_CONFIG_H # include "config.h" #endif +#include "attributes.h" #include "log.h" #include "macros.h" @@ -68,6 +69,38 @@ #define av_assert2_fpu() ((void)0) #endif +/** + * Asserts that are used as compiler optimization hints depending + * upon ASSERT_LEVEL and NBDEBUG. + * + * Undefined behaviour occurs if execution reaches a point marked + * with av_unreachable or if a condition used with av_assume() + * is false. + * + * The condition used with av_assume() should not have side-effects + * and should be visible to the compiler. + */ +#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 || !defined(HAVE_AV_CONFIG_H) && !defined(NDEBUG) +#define av_unreachable av_assert0(0) +#define av_assume(cond) av_assert0(cond) +#elif AV_GCC_VERSION_AT_LEAST(4, 5) || AV_HAS_BUILTIN(__builtin_unreachable) +#define av_unreachable __builtin_unreachable() +#if AV_HAS_BUILTIN(__builtin_assume) +#define av_assume(cond) __builtin_assume(cond) +#else +#define av_assume(cond) do { \ + if (!(cond)) \ + __builtin_unreachable(); \ +} while (0) +#endif +#elif defined(_MSC_VER) +#define av_unreachable __assume(0) +#define av_assume(cond) __assume(cond) +#else +#define av_unreachable +#define av_assume(cond) +#endif + /** * Assert that floating point operations can be executed. *