On Tue, 18 Mar 2025 at 16:47, Tomasz Kamiński <tkami...@redhat.com> wrote: > > ranges::distance may produce an integer-like class type > (ranges::__detail::__max_diff_type) that is only explicitly convertible to > other integer types, so the result needs to be casted to containers size_type. > > PR libstdc++/119358 > > libstdc++-v3/ChangeLog: > > * include/bits/unordered_map.h (unordered_multimap::insert_range): > Cast ranges::distance to size_type before passing to _M_rehash_insert. > * include/bits/unordered_set.h (unordered_multiset::insert_range): > Same as unordered_multimap::insert_range. > * testsuite/23_containers/unordered_multimap/cons/from_range.cc: > New tests. > * testsuite/23_containers/unordered_multiset/cons/from_range.cc: > New tests. > --- > Testing on x86_64-linux, unordered containers test passed. > OK for trunk if all test passes?
Yes, OK. Thanks for the quick fix. > > libstdc++-v3/include/bits/unordered_map.h | 2 +- > libstdc++-v3/include/bits/unordered_set.h | 2 +- > .../unordered_multimap/cons/from_range.cc | 12 ++++++++++++ > .../unordered_multiset/cons/from_range.cc | 11 +++++++++++ > 4 files changed, 25 insertions(+), 2 deletions(-) > > diff --git a/libstdc++-v3/include/bits/unordered_map.h > b/libstdc++-v3/include/bits/unordered_map.h > index 5c930487190..4a0527c6025 100644 > --- a/libstdc++-v3/include/bits/unordered_map.h > +++ b/libstdc++-v3/include/bits/unordered_map.h > @@ -1805,7 +1805,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER > return; > > if constexpr (ranges::forward_range<_Rg> || > ranges::sized_range<_Rg>) > - _M_h._M_rehash_insert(ranges::distance(__rg)); > + _M_h._M_rehash_insert(size_type(ranges::distance(__rg))); > else > _M_h._M_rehash_insert(1); > > diff --git a/libstdc++-v3/include/bits/unordered_set.h > b/libstdc++-v3/include/bits/unordered_set.h > index 21ffdaf50a0..cfa8ee297f4 100644 > --- a/libstdc++-v3/include/bits/unordered_set.h > +++ b/libstdc++-v3/include/bits/unordered_set.h > @@ -1485,7 +1485,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER > return; > > if constexpr (ranges::forward_range<_Rg> || > ranges::sized_range<_Rg>) > - _M_h._M_rehash_insert(ranges::distance(__rg)); > + _M_h._M_rehash_insert(size_type(ranges::distance(__rg))); > else > _M_h._M_rehash_insert(1); > > diff --git > a/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc > b/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc > index 9273ef0d57a..ca06d22d316 100644 > --- > a/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc > +++ > b/libstdc++-v3/testsuite/23_containers/unordered_multimap/cons/from_range.cc > @@ -2,6 +2,7 @@ > > #include <algorithm> > #include <unordered_map> > +#include <ranges> > #include <span> > #include <testsuite_allocator.h> > #include <testsuite_hooks.h> > @@ -232,7 +233,18 @@ test_ranges() > return true; > } > > +void test_PR119358() { > +#ifdef __SIZEOF_INT128__ > + auto r = std::views::iota(__int128(0)) > + | std::views::take(5); > + auto z = std::views::zip(r, r); > + std::unordered_multimap<__int128, __int128> m(std::from_range, z); > + VERIFY( std::ranges::equal(m, z) ); > +#endif > +} > + > int main() > { > test_ranges(); > + test_PR119358(); > } > diff --git > a/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc > b/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc > index fb388764423..80b062747d5 100644 > --- > a/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc > +++ > b/libstdc++-v3/testsuite/23_containers/unordered_multiset/cons/from_range.cc > @@ -2,6 +2,7 @@ > > #include <algorithm> > #include <unordered_set> > +#include <ranges> > #include <span> > #include <testsuite_allocator.h> > #include <testsuite_hooks.h> > @@ -195,7 +196,17 @@ test_ranges() > return true; > } > > +void test_PR119358() { > +#ifdef __SIZEOF_INT128__ > + auto r = std::views::iota(__int128(0)) > + | std::views::take(5); > + std::unordered_multiset<__int128> s(std::from_range, r); > + VERIFY( std::ranges::equal(s, r) ); > +#endif > +} > + > int main() > { > test_ranges(); > + test_PR119358(); > } > -- > 2.48.1 >