aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog34
-rw-r--r--libstdc++-v3/include/bits/utility.h16
-rw-r--r--libstdc++-v3/include/bits/valarray_array.h10
-rw-r--r--libstdc++-v3/include/std/valarray12
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/atomic/pr118757.cc1
-rw-r--r--libstdc++-v3/testsuite/20_util/weak_ptr/pr118757.cc1
-rw-r--r--libstdc++-v3/testsuite/26_numerics/valarray/108951.cc22
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable/members/116586.cc3
-rw-r--r--libstdc++-v3/testsuite/30_threads/future/members/116586.cc3
-rw-r--r--libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/116586.cc3
-rw-r--r--libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/116586.cc3
-rw-r--r--libstdc++-v3/testsuite/ext/iotaarray.cc20
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_iterators.h3
13 files changed, 121 insertions, 10 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 04bba2c..77ab059 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,37 @@
+2025-10-27 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/122401
+ * testsuite/20_util/shared_ptr/atomic/pr118757.cc: Add -pthread
+ for et pthread.
+ * testsuite/20_util/weak_ptr/pr118757.cc: Likewise.
+ * testsuite/30_threads/condition_variable/members/116586.cc:
+ Likewise. Only run for hosted targets with gthreads support.
+ * testsuite/30_threads/future/members/116586.cc: Likewise.
+ * testsuite/30_threads/recursive_timed_mutex/try_lock_until/116586.cc:
+ Likewise.
+ * testsuite/30_threads/timed_mutex/try_lock_until/116586.cc:
+ Likewise.
+
+2025-10-27 Matthias Kretz <m.kretz@gsi.de>
+
+ * include/bits/utility.h (_IotaArray): Define.
+ * testsuite/ext/iotaarray.cc: New test.
+
+2025-10-27 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/108951
+ * include/bits/valarray_array.h( __valarray_get_storage): Use
+ std::__new_allocator.
+ (__valarray_release_memory): Likewise.
+ * include/std/valarray: Pass _M_size to
+ __valarray_release_memory.
+ * testsuite/26_numerics/valarray/108951.cc: New test.
+
+2025-10-27 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/util/testsuite_iterators.h (test_container): Add
+ iterator and value_type typedefs.
+
2025-10-24 Eric Pimentel Aguiar <eric.pimentela@gmail.com>
* src/c++23/std.cc.in (std::strided_slice, std::full_extent_t)
diff --git a/libstdc++-v3/include/bits/utility.h b/libstdc++-v3/include/bits/utility.h
index 4e57465..96ac698 100644
--- a/libstdc++-v3/include/bits/utility.h
+++ b/libstdc++-v3/include/bits/utility.h
@@ -172,6 +172,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using index_sequence_for = make_index_sequence<sizeof...(_Types)>;
#endif // __glibcxx_integer_sequence
+#if __cpp_structured_bindings >= 202411L
+#if __has_builtin(__integer_pack)
+ template <auto _Num, typename _Tp = decltype(_Num)>
+ inline constexpr _Tp
+ _IotaArray[_Num] = {__integer_pack(_Tp(_Num))...};
+#elif defined __glibcxx_integer_sequence
+ template <auto _Num, typename _Tp = decltype(_Num), typename = make_integer_sequence<_Tp, _Num>>
+ inline constexpr _Tp
+ _IotaArray[_Num];
+
+ template <auto _Num, typename _Tp, _Tp... _Is>
+ inline constexpr _Tp
+ _IotaArray<_Num, _Tp, integer_sequence<_Tp, _Is...>>[_Num] = {_Is...};
+#endif // __integer_pack
+#endif // __cpp_structured_bindings >= 202411L
+
#if __cplusplus >= 201703L
struct in_place_t {
diff --git a/libstdc++-v3/include/bits/valarray_array.h b/libstdc++-v3/include/bits/valarray_array.h
index b5c02b7..d1b712c 100644
--- a/libstdc++-v3/include/bits/valarray_array.h
+++ b/libstdc++-v3/include/bits/valarray_array.h
@@ -38,6 +38,7 @@
#include <bits/c++config.h>
#include <bits/cpp_type_traits.h>
+#include <bits/new_allocator.h>
#include <cstdlib>
#include <new>
@@ -57,12 +58,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
inline _Tp*
__valarray_get_storage(size_t __n)
- { return static_cast<_Tp*>(operator new(__n * sizeof(_Tp))); }
+ { return std::__new_allocator<_Tp>().allocate(__n); }
// Return memory to the system
- inline void
- __valarray_release_memory(void* __p)
- { operator delete(__p); }
+ template<typename _Tp>
+ inline void
+ __valarray_release_memory(_Tp* __p, size_t __n)
+ { std::__new_allocator<_Tp>().deallocate(__p, __n); }
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wc++17-extensions" // if constexpr
diff --git a/libstdc++-v3/include/std/valarray b/libstdc++-v3/include/std/valarray
index 82b58ef..ac15e79 100644
--- a/libstdc++-v3/include/std/valarray
+++ b/libstdc++-v3/include/std/valarray
@@ -720,7 +720,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
valarray<_Tp>::~valarray() _GLIBCXX_NOEXCEPT
{
std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
- std::__valarray_release_memory(_M_data);
+ std::__valarray_release_memory(_M_data, _M_size);
}
template<typename _Tp>
@@ -736,7 +736,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (_M_data)
{
std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
- std::__valarray_release_memory(_M_data);
+ std::__valarray_release_memory(_M_data, _M_size);
}
_M_size = __v._M_size;
_M_data = __valarray_get_storage<_Tp>(_M_size);
@@ -754,7 +754,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (_M_data)
{
std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
- std::__valarray_release_memory(_M_data);
+ std::__valarray_release_memory(_M_data, _M_size);
}
_M_size = __v._M_size;
_M_data = __v._M_data;
@@ -776,7 +776,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (_M_data)
{
std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
- std::__valarray_release_memory(_M_data);
+ std::__valarray_release_memory(_M_data, _M_size);
}
_M_size = __l.size();
_M_data = __valarray_get_storage<_Tp>(_M_size);
@@ -854,7 +854,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (_M_data)
{
std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
- std::__valarray_release_memory(_M_data);
+ std::__valarray_release_memory(_M_data, _M_size);
}
_M_size = __e.size();
_M_data = __valarray_get_storage<_Tp>(_M_size);
@@ -1049,7 +1049,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::__valarray_destroy_elements(_M_data, _M_data + _M_size);
if (_M_size != __n)
{
- std::__valarray_release_memory(_M_data);
+ std::__valarray_release_memory(_M_data, _M_size);
_M_size = __n;
_M_data = __valarray_get_storage<_Tp>(__n);
}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/pr118757.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/pr118757.cc
index d54abd8..f49ae38 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/pr118757.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/atomic/pr118757.cc
@@ -1,4 +1,5 @@
// { dg-do run { target c++20 } }
+// { dg-additional-options "-pthread" { target pthread } }
// { dg-require-gthreads "" }
// { dg-require-effective-target hosted }
diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/pr118757.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/pr118757.cc
index f048f13..77757f3 100644
--- a/libstdc++-v3/testsuite/20_util/weak_ptr/pr118757.cc
+++ b/libstdc++-v3/testsuite/20_util/weak_ptr/pr118757.cc
@@ -1,4 +1,5 @@
// { dg-do run { target c++20 } }
+// { dg-additional-options "-pthread" { target pthread } }
// { dg-require-gthreads "" }
// { dg-require-effective-target hosted }
diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/108951.cc b/libstdc++-v3/testsuite/26_numerics/valarray/108951.cc
new file mode 100644
index 0000000..929a1d4
--- /dev/null
+++ b/libstdc++-v3/testsuite/26_numerics/valarray/108951.cc
@@ -0,0 +1,22 @@
+// { dg-do run { target c++11 } }
+// { dg-additional-options "-faligned-new" { target c++14_down } }
+
+#include <valarray>
+#include <cstdint>
+#include <testsuite_hooks.h>
+
+struct alignas(64) Num
+{
+ Num()
+ {
+ VERIFY(reinterpret_cast<std::uintptr_t>(this) % alignof(*this) == 0);
+ }
+
+ double val{};
+};
+
+int main()
+{
+ std::valarray<Num> v(2);
+ v.resize(4, {});
+}
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/members/116586.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/members/116586.cc
index 7114007..e8c3e16 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable/members/116586.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable/members/116586.cc
@@ -1,4 +1,7 @@
// { dg-do run { target c++11 } }
+// { dg-additional-options "-pthread" { target pthread } }
+// { dg-require-gthreads "" }
+// { dg-require-effective-target hosted }
#include <condition_variable>
#include <chrono>
diff --git a/libstdc++-v3/testsuite/30_threads/future/members/116586.cc b/libstdc++-v3/testsuite/30_threads/future/members/116586.cc
index b7cd12c..82f1e5c 100644
--- a/libstdc++-v3/testsuite/30_threads/future/members/116586.cc
+++ b/libstdc++-v3/testsuite/30_threads/future/members/116586.cc
@@ -1,4 +1,7 @@
// { dg-do run { target c++11 } }
+// { dg-additional-options "-pthread" { target pthread } }
+// { dg-require-gthreads "" }
+// { dg-require-effective-target hosted }
#include <future>
#include <chrono>
diff --git a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/116586.cc b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/116586.cc
index 941f3af..25a78e7 100644
--- a/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/116586.cc
+++ b/libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/116586.cc
@@ -1,4 +1,7 @@
// { dg-do run { target c++11 } }
+// { dg-additional-options "-pthread" { target pthread } }
+// { dg-require-gthreads "" }
+// { dg-require-effective-target hosted }
#include <mutex>
#include <chrono>
diff --git a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/116586.cc b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/116586.cc
index dcba7aa..1566228 100644
--- a/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/116586.cc
+++ b/libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/116586.cc
@@ -1,4 +1,7 @@
// { dg-do run { target c++11 } }
+// { dg-additional-options "-pthread" { target pthread } }
+// { dg-require-gthreads "" }
+// { dg-require-effective-target hosted }
#include <chrono>
#include <mutex>
diff --git a/libstdc++-v3/testsuite/ext/iotaarray.cc b/libstdc++-v3/testsuite/ext/iotaarray.cc
new file mode 100644
index 0000000..b259602
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/iotaarray.cc
@@ -0,0 +1,20 @@
+// { dg-do compile { target c++26 } }
+
+#include <utility>
+#include <type_traits>
+
+template<auto N>
+void test()
+{
+ constexpr auto [id0, ...ids] = std::_IotaArray<N>;
+ static_assert( std::is_same_v<decltype(id0), const decltype(N)> );
+ static_assert( sizeof...(ids) == N - 1 );
+ static_assert( (id0 + ... + ids) == N*(N-1)/2 );
+}
+
+int main()
+{
+ test<1>();
+ test<4u>();
+ test<8ull>();
+}
diff --git a/libstdc++-v3/testsuite/util/testsuite_iterators.h b/libstdc++-v3/testsuite/util/testsuite_iterators.h
index 5bf2e70..41fbcaa 100644
--- a/libstdc++-v3/testsuite/util/testsuite_iterators.h
+++ b/libstdc++-v3/testsuite/util/testsuite_iterators.h
@@ -674,6 +674,9 @@ namespace __gnu_test
template <class T, template<class TT> class ItType>
struct test_container
{
+ typedef ItType<T> iterator;
+ typedef typename iterator::value_type value_type;
+
typename ItType<T>::ContainerType bounds;
_GLIBCXX_CONSTEXPR