Fix preprocessor checks for Clang builtins
Clang seems to define built-ins that start with "__builtin_" as non-keywords, which means that we need to use __has_builtin to detect them, not __is_identifier. The built-ins that don't start with "__builtin_" are keywords, and can only be detected using __is_identifier and not by __has_builtin. * include/bits/c++config (_GLIBCXX_HAVE_BUILTIN_LAUNDER) (_GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED): Use __has_builtin instead of __is_identifier to detect Clang support. From-SVN: r272931
This commit is contained in:
parent
fe51b12950
commit
4887c9e808
2 changed files with 9 additions and 3 deletions
|
@ -1,3 +1,9 @@
|
|||
2019-07-02 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* include/bits/c++config (_GLIBCXX_HAVE_BUILTIN_LAUNDER)
|
||||
(_GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED): Use __has_builtin
|
||||
instead of __is_identifier to detect Clang support.
|
||||
|
||||
2019-07-02 Jim Wilson <jimw@sifive.com>
|
||||
|
||||
* configure.ac (BUILD_PDF): Also test for doxygen, dot, xsltproc,
|
||||
|
|
|
@ -636,7 +636,7 @@ namespace std
|
|||
# if __GNUC__ >= 9
|
||||
# define _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED 1
|
||||
# endif
|
||||
#elif defined(__is_identifier)
|
||||
#elif defined(__is_identifier) && defined(__has_builtin)
|
||||
// For non-GNU compilers:
|
||||
# if ! __is_identifier(__has_unique_object_representations)
|
||||
# define _GLIBCXX_HAVE_BUILTIN_HAS_UNIQ_OBJ_REP 1
|
||||
|
@ -644,10 +644,10 @@ namespace std
|
|||
# if ! __is_identifier(__is_aggregate)
|
||||
# define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1
|
||||
# endif
|
||||
# if ! __is_identifier(__builtin_launder)
|
||||
# if __has_builtin(__builtin_launder)
|
||||
# define _GLIBCXX_HAVE_BUILTIN_LAUNDER 1
|
||||
# endif
|
||||
# if ! __is_identifier(__builtin_is_constant_evaluated)
|
||||
# if __has_builtin(__builtin_is_constant_evaluated)
|
||||
# define _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED 1
|
||||
# endif
|
||||
#endif // GCC
|
||||
|
|
Loading…
Add table
Reference in a new issue