aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-07-02 12:50:27 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2019-07-02 12:50:27 +0100
commit4887c9e80839eee3628490003abab18b17492401 (patch)
tree9e81b71ff21870788ad227c9b6432113e683ef8a
parentfe51b129500370ad5818e6dc7a2439f53796f59e (diff)
downloadgcc-4887c9e80839eee3628490003abab18b17492401.zip
gcc-4887c9e80839eee3628490003abab18b17492401.tar.gz
gcc-4887c9e80839eee3628490003abab18b17492401.tar.bz2
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
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/include/bits/c++config6
2 files changed, 9 insertions, 3 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 8d36a12..0a31f6b 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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,
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 746e35e..c8e099a 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -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