aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2025-03-26 11:47:05 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2025-03-27 15:26:32 +0000
commitf4b6acfc36fb1f72fdd5bf4da208515e6495a062 (patch)
tree444e269f1ac25354746f1b42fa52f08418f5fcd9 /libstdc++-v3/testsuite
parent16766d5a0c4a946d3ba9255a99621975b9773e18 (diff)
downloadgcc-f4b6acfc36fb1f72fdd5bf4da208515e6495a062.zip
gcc-f4b6acfc36fb1f72fdd5bf4da208515e6495a062.tar.gz
gcc-f4b6acfc36fb1f72fdd5bf4da208515e6495a062.tar.bz2
libstdc++: Replace use of std::min in ranges::uninitialized_xxx algos [PR101587]
Because ranges can have any signed integer-like type as difference_type, it's not valid to use std::min(diff1, diff2). Instead of calling std::min with an explicit template argument, this adds a new __mindist helper that determines the common type and uses that with std::min. libstdc++-v3/ChangeLog: PR libstdc++/101587 * include/bits/ranges_uninitialized.h (__detail::__mindist): New function object. (ranges::uninitialized_copy, ranges::uninitialized_copy_n) (ranges::uninitialized_move, ranges::uninitialized_move_n): Use __mindist instead of std::min. * testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc: Check ranges with difference difference types. * testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc: Likewise.
Diffstat (limited to 'libstdc++-v3/testsuite')
-rw-r--r--libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc13
-rw-r--r--libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc13
2 files changed, 26 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc
index e0589e3..af3b733 100644
--- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/constrained.cc
@@ -175,6 +175,17 @@ test03()
}
}
+void
+test_pr101587()
+{
+ short in[1];
+ __gnu_test::test_contiguous_range r(in); // difference_type is integer-like
+ long out[1];
+ std::span<long> o(out); // difference_type is ptrdiff_t
+ ranges::uninitialized_copy(r, o);
+ ranges::uninitialized_copy_n(ranges::begin(r), 0, o.begin(), o.end());
+}
+
int
main()
{
@@ -188,4 +199,6 @@ main()
test02<false>();
test02<true>();
+
+ test_pr101587();
}
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc
index 4c858e1..fe82d1f1 100644
--- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_move/constrained.cc
@@ -185,6 +185,17 @@ test03()
}
}
+void
+test_pr101587()
+{
+ short in[1];
+ __gnu_test::test_contiguous_range r(in); // difference_type is integer-like
+ long out[1];
+ std::span<long> o(out); // difference_type is ptrdiff_t
+ ranges::uninitialized_move(r, o);
+ ranges::uninitialized_move_n(ranges::begin(r), 0, o.begin(), o.end());
+}
+
int
main()
{
@@ -198,4 +209,6 @@ main()
test02<false>();
test02<true>();
+
+ test_pr101587();
}