[gcc r15-7650] libstdc++: Workaround Clang bug with __array_rank built-in [PR118559]
Jonathan Wakely
redi@gcc.gnu.org
Thu Feb 20 11:45:18 GMT 2025
https://gcc.gnu.org/g:c0e865f73ddee2e7247a23a7d57ad80261861d35
commit r15-7650-gc0e865f73ddee2e7247a23a7d57ad80261861d35
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Wed Feb 19 14:46:32 2025 +0000
libstdc++: Workaround Clang bug with __array_rank built-in [PR118559]
We started using the __array_rank built-in with r15-1252-g6f0dfa6f1acdf7
but that built-in is buggy in versions of Clang up to and including 19.
libstdc++-v3/ChangeLog:
PR libstdc++/118559
* include/std/type_traits (rank, rank_v): Do not use
__array_rank for Clang 19 and older.
Diff:
---
libstdc++-v3/include/std/type_traits | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index 338928182576..676cdf2d7e66 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -1484,7 +1484,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
/// rank
-#if _GLIBCXX_USE_BUILTIN_TRAIT(__array_rank)
+#if _GLIBCXX_USE_BUILTIN_TRAIT(__array_rank) \
+ && (!defined(__clang__) || __clang_major__ >= 20) // PR118559
template<typename _Tp>
struct rank
: public integral_constant<std::size_t, __array_rank(_Tp)> { };
@@ -3656,7 +3657,8 @@ template <typename _Tp>
template <typename _Tp>
inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value;
-#if _GLIBCXX_USE_BUILTIN_TRAIT(__array_rank)
+#if _GLIBCXX_USE_BUILTIN_TRAIT(__array_rank) \
+ && (!defined(__clang__) || __clang_major__ >= 20) // PR118559
template <typename _Tp>
inline constexpr size_t rank_v = __array_rank(_Tp);
#else
More information about the Libstdc++-cvs
mailing list