From: Willy Tarreau Date: Tue, 17 Dec 2024 08:10:53 +0000 (+0100) Subject: MINOR: compiler: rely on builtin detection for __builtin_unreachable() X-Git-Tag: v3.2-dev2~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=41fc18b1d1a37e2a6645ea4a8fb4d2d5f009fc0c;p=thirdparty%2Fhaproxy.git MINOR: compiler: rely on builtin detection for __builtin_unreachable() Due to __builtin_unreachable() only being associated to gcc 4.5 and above, it turns out it was not enabled for clang. It's not used *that* much but still a little bit, so let's enable it now. This reduces the code size by 0.2% and makes it a bit more efficient. --- diff --git a/include/haproxy/compiler.h b/include/haproxy/compiler.h index 4fcf94c03e..4b23d702d7 100644 --- a/include/haproxy/compiler.h +++ b/include/haproxy/compiler.h @@ -191,6 +191,11 @@ #define __read_mostly HA_SECTION("read_mostly") #endif +/* __builtin_unreachable() was added in gcc 4.5 */ +#if defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +#define __has_builtin___builtin_unreachable 1 +#endif + /* This allows gcc to know that some locations are never reached, for example * after a longjmp() in the Lua code, hence that some errors caught by such * methods cannot propagate further. This is important with gcc versions 6 and @@ -200,7 +205,7 @@ #ifdef DEBUG_USE_ABORT #define my_unreachable() abort() #else -#if defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +#if __has_builtin(__builtin_unreachable) #define my_unreachable() __builtin_unreachable() #else #define my_unreachable() do { } while (1)