util: Implement assume() for clang.
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
@@ -29,6 +29,10 @@
|
|||||||
# define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
|
# define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* For compatibility with Clang's __has_builtin() */
|
||||||
|
#ifndef __has_builtin
|
||||||
|
# define __has_builtin(x) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __builtin_expect macros
|
* __builtin_expect macros
|
||||||
@@ -85,7 +89,13 @@ do { \
|
|||||||
* Assume macro. Useful for expressing our assumptions to the compiler,
|
* Assume macro. Useful for expressing our assumptions to the compiler,
|
||||||
* typically for purposes of silencing warnings.
|
* typically for purposes of silencing warnings.
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE___BUILTIN_UNREACHABLE
|
#if __has_builtin(__builtin_assume)
|
||||||
|
#define assume(expr) \
|
||||||
|
do { \
|
||||||
|
assert(expr); \
|
||||||
|
__builtin_assume(expr); \
|
||||||
|
} while (0)
|
||||||
|
#elif defined HAVE___BUILTIN_UNREACHABLE
|
||||||
#define assume(expr) ((expr) ? ((void) 0) \
|
#define assume(expr) ((expr) ? ((void) 0) \
|
||||||
: (assert(!"assumption failed"), \
|
: (assert(!"assumption failed"), \
|
||||||
__builtin_unreachable()))
|
__builtin_unreachable()))
|
||||||
|
Reference in New Issue
Block a user