From fe21244b055dbcf3805d105f48437f36db2f25be Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Tue, 20 Dec 2022 22:47:02 +0100 Subject: [PATCH] include: Use __has_builtin to detect __builtin_offsetof support The __has_builtin operator is more specific and is supported by GCC and Clang, while __is_identifier() is less specific and only supported by Clang, so we should prefer the former whenever it is available, and only fallback to use the latter when the former is missing and the latter. --- include/bsd/sys/cdefs.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/bsd/sys/cdefs.h b/include/bsd/sys/cdefs.h index ac18296..126f427 100644 --- a/include/bsd/sys/cdefs.h +++ b/include/bsd/sys/cdefs.h @@ -37,6 +37,9 @@ #ifndef __is_identifier #define __is_identifier(x) 1 #endif +#ifndef __has_builtin +#define __has_builtin(x) !__is_identifier(x) +#endif #ifdef LIBBSD_OVERLAY /* @@ -182,7 +185,7 @@ * require it. */ #ifndef __offsetof -# if LIBBSD_GCC_VERSION >= 0x0401 || !__is_identifier(__builtin_offsetof) +# if LIBBSD_GCC_VERSION >= 0x0401 || __has_builtin(__builtin_offsetof) # define __offsetof(type, field) __builtin_offsetof(type, field) # else # ifndef __cplusplus