Explorar el Código

LibC: Replace use of do/while in assert() with the ternary operator

It's a single expression, no do/while needed. This makes assert() work
with the comma operator (assert(foo), assert(bar), assert(baz)).
Found because exactly this is being used somewhere in the guts of LLVM.
Linus Groh hace 4 años
padre
commit
15d5c62915
Se han modificado 1 ficheros con 5 adiciones y 5 borrados
  1. 5 5
      Userland/Libraries/LibC/assert.h

+ 5 - 5
Userland/Libraries/LibC/assert.h

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