From: Jonathan Wakely Date: Wed, 3 Jul 2019 21:09:08 +0000 (+0100) Subject: Fix preprocessor checks for Clang builtins X-Git-Tag: releases/gcc-9.2.0~175 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3c822eb81afc9dae1f5900f0a0012f24c7b914d;p=thirdparty%2Fgcc.git 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. Backport from mainline 2019-07-02 Jonathan Wakely * 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: r273024 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1ca540f3ede5..147ac95b3905 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2019-07-03 Jonathan Wakely + + Backport from mainline + 2019-07-02 Jonathan Wakely + + * 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-06-27 Jonathan Wakely PR libstdc++/85494 use rand_s in std::random_device diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 5016f4853de3..7a7e78819ba7 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -649,7 +649,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 @@ -657,10 +657,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