PR libstdc++/80446 cope with libc defining __has_builtin
authorJonathan Wakely <jwakely@redhat.com>
Wed, 19 Apr 2017 10:49:12 +0000 (11:49 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 19 Apr 2017 10:49:12 +0000 (11:49 +0100)
PR libstdc++/80446
* include/std/type_traits (is_aggregate): Change __has_builtin checks.
* libsupc++/new (launder): Likewise.

From-SVN: r246992

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/type_traits
libstdc++-v3/libsupc++/new

index 503f23411020c4c79b34a9db1f77cd12f94cc80b..3d0561ba36e7633b175834c6de5837257c54a600 100644 (file)
@@ -1,3 +1,9 @@
+2017-04-19  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/80446
+       * include/std/type_traits (is_aggregate): Change __has_builtin checks.
+       * libsupc++/new (launder): Likewise.
+
 2017-04-18  Jonathan Wakely  <jwakely@redhat.com>
 
        * include/std/functional (default_searcher, __boyer_moore_array_base)
index 8ea280125e650f313f3c7ab65b77f42505f902b8..aac7cff6cf617df9d4f836584a249725c3f738cd 100644 (file)
@@ -3062,14 +3062,16 @@ template <typename _From, typename _To>
 #endif
 #undef _GLIBCXX_NO_BUILTIN_HAS_UNIQ_OBJ_REP
 
-#ifdef __has_builtin
-# if !__has_builtin(__is_aggregate)
-// Try not to break non-GNU compilers that don't support the built-in:
-#  define _GLIBCXX_NO_BUILTIN_IS_AGGREGATE 1
+#if __GNUC__ >= 7
+# define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1
+#elif defined __has_builtin
+// For non-GNU compilers:
+# if __has_builtin(__is_aggregate)
+#  define _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE 1
 # endif
 #endif
 
-#ifndef _GLIBCXX_NO_BUILTIN_IS_AGGREGATE
+#ifdef _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE
 #define __cpp_lib_is_aggregate 201703
   /// is_aggregate
   template<typename _Tp>
@@ -3080,7 +3082,7 @@ template <typename _From, typename _To>
   template<typename _Tp>
     inline constexpr bool is_aggregate_v = is_aggregate<_Tp>::value;
 #endif
-#undef _GLIBCXX_NO_BUILTIN_IS_AGGREGATE
+#undef _GLIBCXX_HAVE_BUILTIN_IS_AGGREGATE
 
 #endif // C++17
 
index 9a7859dc2b1fd188216cdd138415cef2d901a3e0..2de77525c218b5b127d3732913b2dd1819ab31d6 100644 (file)
@@ -177,14 +177,16 @@ inline void operator delete[](void*, void*) _GLIBCXX_USE_NOEXCEPT { }
 } // extern "C++"
 
 #if __cplusplus > 201402L
-#ifdef __has_builtin
-# if !__has_builtin(__builtin_launder)
-// Try not to break non-GNU compilers that don't support the built-in:
-#  define _GLIBCXX_NO_BUILTIN_LAUNDER 1
+#if __GNUC__ >= 7
+#  define _GLIBCXX_HAVE_BUILTIN_LAUNDER 1
+#elif defined __has_builtin
+// For non-GNU compilers:
+# if __has_builtin(__builtin_launder)
+#  define _GLIBCXX_HAVE_BUILTIN_LAUNDER 1
 # endif
 #endif
 
-#ifndef _GLIBCXX_NO_BUILTIN_LAUNDER
+#ifdef _GLIBCXX_HAVE_BUILTIN_LAUNDER
 namespace std
 {
 #define __cpp_lib_launder 201606
@@ -208,7 +210,7 @@ namespace std
   void launder(const volatile void*) = delete;
 }
 #endif // _GLIBCXX_NO_BUILTIN_LAUNDER
-#undef _GLIBCXX_NO_BUILTIN_LAUNDER
+#undef _GLIBCXX_HAVE_BUILTIN_LAUNDER
 #endif // C++17
 
 #pragma GCC visibility pop