From 1b36ddce1d19b6d82bdfa6ebf39c311a4599a988 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Thu, 30 Apr 2020 11:54:27 +0300 Subject: [PATCH] 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. --- Libraries/LibC/assert.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Libraries/LibC/assert.h b/Libraries/LibC/assert.h index bc374e5e126..18711ac0e85 100644 --- a/Libraries/LibC/assert.h +++ b/Libraries/LibC/assert.h @@ -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)