Work around __has_attribute bug in clang 3.4

* src/conf_post.h (HAS_ATTRIBUTE):
* src/emacs-module.h.in (EMACS_ATTRIBUTE_NONNULL):
Port to clang 3.4 and earlier.
This commit is contained in:
Paul Eggert 2021-01-22 11:47:22 -08:00
parent a900e641fa
commit b99ec5d5b1
2 changed files with 6 additions and 2 deletions

View file

@ -71,7 +71,9 @@ typedef bool bool_bf;
It is used only on arguments like cleanup that are handled here.
This macro should be used only in #if expressions, as Oracle
Studio 12.5's __has_attribute does not work in plain code. */
#ifdef __has_attribute
#if (defined __has_attribute \
&& (!defined __clang_minor__ \
|| 3 < __clang_major__ + (5 <= __clang_minor__)))
# define HAS_ATTRIBUTE(a) __has_attribute (__##a##__)
#else
# define HAS_ATTRIBUTE(a) HAS_ATTR_##a

View file

@ -51,7 +51,9 @@ information how to write modules and use this header file.
#if 3 < __GNUC__ + (3 <= __GNUC_MINOR__)
# define EMACS_ATTRIBUTE_NONNULL(...) \
__attribute__ ((__nonnull__ (__VA_ARGS__)))
#elif defined __has_attribute
#elif (defined __has_attribute \
&& (!defined __clang_minor__ \
|| 3 < __clang_major__ + (5 <= __clang_minor__)))
# if __has_attribute (__nonnull__)
# define EMACS_ATTRIBUTE_NONNULL(...) \
__attribute__ ((__nonnull__ (__VA_ARGS__)))