MINOR: compiler: also enable __builtin_assume() for ASSUME()

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.
This commit is contained in:
Willy Tarreau 2024-12-17 09:19:20 +01:00
parent efc897484b
commit 2ce63b7b17

View File

@ -219,9 +219,11 @@
* know that some conditions are not supposed to happen. This can only be used * 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 * 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 * 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) # define ASSUME(expr) do { if (!(expr)) __builtin_unreachable(); } while (0)
#else #else
# define ASSUME(expr) do { if (!(expr)) break; } while (0) # define ASSUME(expr) do { if (!(expr)) break; } while (0)