MINOR: compiler: also enable __builtin_assume() for ASSUME()
authorWilly Tarreau <w@1wt.eu>
Tue, 17 Dec 2024 08:19:20 +0000 (09:19 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 17 Apr 2025 15:04:35 +0000 (17:04 +0200)
Clang apparently has __builtin_assume() which does exactly the same
as our macro, since at least v3.8. Let's enable it, in case it may
even better detect assumptions vs unreachable code.

(cherry picked from commit 2ce63b7b17c45e31ef8c3dec33b9b54aea656154)
Signed-off-by: Willy Tarreau <w@1wt.eu>

include/haproxy/compiler.h

index 725211d..a375057 100644 (file)
  * know that some conditions are not supposed to happen. This can only be used
  * with compilers that support it, and we do not want to emit any static code
  * for other ones, so we use a construct that the compiler should easily be
- * able to optimize away.
+ * able to optimize away. Clang also has __builtin_assume() since at least 3.x.
  */
-#if __has_builtin(__builtin_unreachable)
+#if __has_builtin(__builtin_assume)
+# define ASSUME(expr) __builtin_assume(expr)
+#elif __has_builtin(__builtin_unreachable)
 # define ASSUME(expr) do { if (!(expr)) __builtin_unreachable(); } while (0)
 #else
 # define ASSUME(expr) do { if (!(expr)) break; } while (0)