Ver código fonte

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.
Sergey Bugaev 5 anos atrás
pai
commit
1b36ddce1d
1 arquivos alterados com 5 adições e 1 exclusões
  1. 5 1
      Libraries/LibC/assert.h

+ 5 - 1
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)