[gcc/devel/omp/gcc-9] Fix preprocessor checks for Clang builtins

Tobias Burnus burnus@gcc.gnu.org
Thu Mar 5 14:05:00 GMT 2020


https://gcc.gnu.org/g:a3c822eb81afc9dae1f5900f0a0012f24c7b914d

commit a3c822eb81afc9dae1f5900f0a0012f24c7b914d
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Wed Jul 3 22:09:08 2019 +0100

    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  <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.
    
    From-SVN: r273024

Diff:
---
 libstdc++-v3/ChangeLog              | 9 +++++++++
 libstdc++-v3/include/bits/c++config | 6 +++---
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 1ca540f..147ac95 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,12 @@
+2019-07-03  Jonathan Wakely  <jwakely@redhat.com>
+
+	Backport from mainline
+	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-06-27  Jonathan Wakely  <jwakely@redhat.com>
 
 	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 5016f48..7a7e788 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



More information about the Libstdc++-cvs mailing list