Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
19354: core/compiler_hints: add assume() hint r=maribu a=benpicco



Co-authored-by: Benjamin Valentin <benpicco@beuth-hochschule.de>
  • Loading branch information
bors[bot] and benpicco authored Apr 27, 2023
2 parents d371f13 + a5bc1b3 commit 7213c0a
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion core/lib/include/compiler_hints.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#ifndef COMPILER_HINTS_H
#define COMPILER_HINTS_H

#include <assert.h>
#include <stdint.h>

#ifdef __cplusplus
Expand Down Expand Up @@ -89,7 +90,7 @@ extern "C" {
* Use this if the compiler cannot tell that e.g.
* an assembler instruction causes a longjmp, or a write causes a reboot.
*/
#if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ >= 5)
#if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ >= 5) || defined(__clang__)
#define UNREACHABLE() __builtin_unreachable()
#else
#define UNREACHABLE() do { /* nothing */ } while (1)
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 7213c0a

Please sign in to comment.