forked from OSchip/llvm-project
Fix possible loss of data warnings on amd64
In T_size_size.pass, there is an explicit template argument to std::min to ask for unsigned, to avoid type deduction errors. However, C1XX' warnings still hate this use, because a 64 bit value (a size_t) is being passed to a function accepting an unsigned (a 32 bit value). Instead, change the tests to pass around std::size_t instances, and explicitly narrow when constructing the string type under test. This also allows removal of explicit template arguments to std::min. llvm-svn: 302473
This commit is contained in:
parent
8c401179a3
commit
362ea7329f
|
@ -27,16 +27,17 @@
|
||||||
|
|
||||||
template <class S, class SV>
|
template <class S, class SV>
|
||||||
void
|
void
|
||||||
test(SV sv, unsigned pos, unsigned n)
|
test(SV sv, std::size_t pos, std::size_t n)
|
||||||
{
|
{
|
||||||
typedef typename S::traits_type T;
|
typedef typename S::traits_type T;
|
||||||
typedef typename S::allocator_type A;
|
typedef typename S::allocator_type A;
|
||||||
|
typedef typename S::size_type Size;
|
||||||
if (pos <= sv.size())
|
if (pos <= sv.size())
|
||||||
{
|
{
|
||||||
S s2(sv, pos, n);
|
S s2(sv, static_cast<Size>(pos), static_cast<Size>(n));
|
||||||
LIBCPP_ASSERT(s2.__invariants());
|
LIBCPP_ASSERT(s2.__invariants());
|
||||||
assert(pos <= sv.size());
|
assert(pos <= sv.size());
|
||||||
unsigned rlen = std::min<unsigned>(sv.size() - pos, n);
|
std::size_t rlen = std::min(sv.size() - pos, n);
|
||||||
assert(s2.size() == rlen);
|
assert(s2.size() == rlen);
|
||||||
assert(T::compare(s2.data(), sv.data() + pos, rlen) == 0);
|
assert(T::compare(s2.data(), sv.data() + pos, rlen) == 0);
|
||||||
assert(s2.get_allocator() == A());
|
assert(s2.get_allocator() == A());
|
||||||
|
@ -47,7 +48,7 @@ test(SV sv, unsigned pos, unsigned n)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
S s2(sv, pos, n);
|
S s2(sv, static_cast<Size>(pos), static_cast<Size>(n));
|
||||||
assert(false);
|
assert(false);
|
||||||
}
|
}
|
||||||
catch (std::out_of_range&)
|
catch (std::out_of_range&)
|
||||||
|
@ -60,15 +61,16 @@ test(SV sv, unsigned pos, unsigned n)
|
||||||
|
|
||||||
template <class S, class SV>
|
template <class S, class SV>
|
||||||
void
|
void
|
||||||
test(SV sv, unsigned pos, unsigned n, const typename S::allocator_type& a)
|
test(SV sv, std::size_t pos, std::size_t n, const typename S::allocator_type& a)
|
||||||
{
|
{
|
||||||
typedef typename S::traits_type T;
|
typedef typename S::traits_type T;
|
||||||
|
typedef typename S::size_type Size;
|
||||||
if (pos <= sv.size())
|
if (pos <= sv.size())
|
||||||
{
|
{
|
||||||
S s2(sv, pos, n, a);
|
S s2(sv, static_cast<Size>(pos), static_cast<Size>(n), a);
|
||||||
LIBCPP_ASSERT(s2.__invariants());
|
LIBCPP_ASSERT(s2.__invariants());
|
||||||
assert(pos <= sv.size());
|
assert(pos <= sv.size());
|
||||||
unsigned rlen = std::min<unsigned>(sv.size() - pos, n);
|
std::size_t rlen = std::min(sv.size() - pos, n);
|
||||||
assert(s2.size() == rlen);
|
assert(s2.size() == rlen);
|
||||||
assert(T::compare(s2.data(), sv.data() + pos, rlen) == 0);
|
assert(T::compare(s2.data(), sv.data() + pos, rlen) == 0);
|
||||||
assert(s2.get_allocator() == a);
|
assert(s2.get_allocator() == a);
|
||||||
|
@ -79,7 +81,7 @@ test(SV sv, unsigned pos, unsigned n, const typename S::allocator_type& a)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
S s2(sv, pos, n, a);
|
S s2(sv, static_cast<Size>(pos), static_cast<Size>(n), a);
|
||||||
assert(false);
|
assert(false);
|
||||||
}
|
}
|
||||||
catch (std::out_of_range&)
|
catch (std::out_of_range&)
|
||||||
|
|
Loading…
Reference in New Issue