]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: compiler: add a __has_builtin() macro to detect features more easily
authorWilly Tarreau <w@1wt.eu>
Tue, 17 Dec 2024 07:54:23 +0000 (08:54 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 17 Dec 2024 15:46:46 +0000 (16:46 +0100)
We already have a __has_attribute() macro to detect when the compiler
supports a specific attribute, but we didn't have the equivalent for
builtins. clang-3 and gcc-10 have __has_builtin() for this. Let's just
bring it using the same mechanism as __has_attribute(), which will allow
us to simply define the macro's value for older compilers. It will save
us from keeping that many compiler-specific tests that are incomplete
(e.g. the __builtin_unreachable() test currently doesn't cover clang).

include/haproxy/compiler.h

index ba4b12ddca88f26fdd6e8881072e90836eebc688..4fcf94c03e8f4b6dcaa1ac94308760811a22efc8 100644 (file)
 #define __has_attribute(x) __equals_1(__has_attribute_ ## x)
 #endif
 
+/* gcc 10 and clang 3 brought __has_builtin() to test if a builtin exists.
+ * Just like above, if it doesn't exist, we remap it to a macro allowing us
+ * to define these ourselves by defining __has_builtin_<name> to 1.
+ */
+#ifndef __has_builtin
+#define __has_builtin(x) __equals_1(__has_builtin_ ## x)
+#endif
+
 /* The fallthrough attribute arrived with gcc 7, the same version that started
  * to emit the fallthrough warnings and to parse the comments. Comments do not
  * manage to stop the warning when preprocessing is split from compiling (e.g.