Only use __has_include when it is defined

Per GCC's documentation:

> The __has_include operator by itself, without any operand or parentheses, acts as a predefined macro so that support for it can be tested in portable code. Thus, the recommended use of the operator is as follows:
>
>     #if defined __has_include
>     #  if __has_include (<stdatomic.h>)
>     #    include <stdatomic.h>
>     #  endif
>     #endif
>
> The first ‘#if’ test succeeds only when the operator is supported by the version of GCC (or another compiler) being used. Only when that test succeeds is it valid to use __has_include as a preprocessor operator.
This commit is contained in:
James McCoy
2020-09-20 11:30:20 -04:00
parent 9f704c88a5
commit 461c18edad
2 changed files with 8 additions and 1 deletions

View File

@@ -152,6 +152,12 @@
#define STR_(x) #x
#define STR(x) STR_(x)
#ifndef __has_include
# define NVIM_HAS_INCLUDE(x) 0
#else
# define NVIM_HAS_INCLUDE __has_include
#endif
#ifndef __has_attribute
# define NVIM_HAS_ATTRIBUTE(x) 0
#elif defined(__clang__) && __clang__ == 1 \