From c1f63cafa8c50ae218f79847588b52ed30851dcb Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Mon, 6 Mar 2023 19:21:59 +0100 Subject: [PATCH] core/compiler_hints: add assume() hint --- core/lib/include/compiler_hints.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/core/lib/include/compiler_hints.h b/core/lib/include/compiler_hints.h index 78180e5b9c..3cca6cdfbc 100644 --- a/core/lib/include/compiler_hints.h +++ b/core/lib/include/compiler_hints.h @@ -21,6 +21,7 @@ #ifndef COMPILER_HINTS_H #define COMPILER_HINTS_H +#include #include #ifdef __cplusplus @@ -164,6 +165,22 @@ extern "C" { */ #define unlikely(x) __builtin_expect((uintptr_t)(x), 0) +/** + * @brief Behaves like an `assert()`, but tells the compiler that @p cond can + * never be false. + * This allows the compiler to optimize the code accordingly even when + * `NDEBUG` is set / with `DEVELHELP=0`. + * + * @p cond being false will result in undefined behavior. + * + * @param[in] cond Condition that is guaranteed to be true + */ +#ifdef NDEBUG +#define assume(cond) ((cond) ? (void)0 : UNREACHABLE()) +#else +#define assume(cond) assert(cond) +#endif + #ifdef __cplusplus } #endif