LibC: Hint the compiler that assertions rarely fail

Also, rewrite the macro to expand to an if statement instead of
a weird ternary operator with a (void)0 banch.
This commit is contained in:
Sergey Bugaev 2020-04-30 11:54:27 +03:00 committed by Andreas Kling
parent b319aca81a
commit 1b36ddce1d
Notes: sideshowbarker 2024-07-19 07:09:50 +09:00

View file

@ -34,7 +34,11 @@ __BEGIN_DECLS
__attribute__((noreturn)) void __assertion_failed(const char* msg);
# define __stringify_helper(x) # x
# define __stringify(x) __stringify_helper(x)
# define assert(expr) ((expr) ? (void)0 : __assertion_failed(# expr "\n" __FILE__ ":" __stringify(__LINE__)));
# define assert(expr) \
do { \
if (__builtin_expect(!(expr), 0)) \
__assertion_failed(#expr "\n" __FILE__ ":" __stringify(__LINE__)); \
} while (0)
# define ASSERT_NOT_REACHED() assert(false)
#else
# define assert(expr)