[libc++] Fix ssize test that made an assumption about ptrdiff_t being 'long'
On some platforms like armv7m, the size() method of containers returns
unsigned long, while ptrdiff_t is just int. Hence, std::ssize_t ends up
being long, which is not the same as ptrdiff_t. This is usually not an
issue because std::ptrdiff_t is long, so everything works out, but it
breaks on some more exotic architectures.
Differential Revision: https://reviews.llvm.org/D114563
GitOrigin-RevId: 151a7dafd31683c8db933a6a03e305184e1218f9
diff --git a/test/std/iterators/iterator.container/ssize.pass.cpp b/test/std/iterators/iterator.container/ssize.pass.cpp
index f077e97..f95cdc1 100644
--- a/test/std/iterators/iterator.container/ssize.pass.cpp
+++ b/test/std/iterators/iterator.container/ssize.pass.cpp
@@ -78,14 +78,15 @@
std::list<int> l; l.push_back(2);
std::array<int, 1> a; a[0] = 3;
std::initializer_list<int> il = { 4 };
+ using SSize = std::common_type_t<std::ptrdiff_t, std::make_signed_t<std::size_t>>;
test_container ( v );
- ASSERT_SAME_TYPE(ptrdiff_t, decltype(std::ssize(v)));
+ ASSERT_SAME_TYPE(SSize, decltype(std::ssize(v)));
test_container ( l );
- ASSERT_SAME_TYPE(ptrdiff_t, decltype(std::ssize(l)));
+ ASSERT_SAME_TYPE(SSize, decltype(std::ssize(l)));
test_container ( a );
- ASSERT_SAME_TYPE(ptrdiff_t, decltype(std::ssize(a)));
+ ASSERT_SAME_TYPE(SSize, decltype(std::ssize(a)));
test_container ( il );
- ASSERT_SAME_TYPE(ptrdiff_t, decltype(std::ssize(il)));
+ ASSERT_SAME_TYPE(SSize, decltype(std::ssize(il)));
test_const_container ( v );
test_const_container ( l );
@@ -94,7 +95,7 @@
std::string_view sv{"ABC"};
test_container ( sv );
- ASSERT_SAME_TYPE(ptrdiff_t, decltype(std::ssize(sv)));
+ ASSERT_SAME_TYPE(SSize, decltype(std::ssize(sv)));
test_const_container ( sv );
static constexpr int arrA [] { 1, 2, 3 };