From 4e19c47556b227b5f83b7882effa364c181028d5 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Thu, 8 Dec 2016 21:38:44 +0000 Subject: [PATCH] [libcxx] [test] Fix MSVC warning C4244 "conversion from 'X' to 'Y', possible loss of data", part 6/7. test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle_rand.pass.cpp (Affects 64-bit architectures.) Include so we can take/return std::ptrdiff_t (instead of int) in random_shuffle()'s RNG. (C++14 D.12 [depr.alg.random.shuffle]/2 says that difference_type is used, and we're shuffling a plain array.) test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp test/std/algorithms/alg.sorting/alg.sort/stable.sort/stable_sort.pass.cpp (Affects 64-bit architectures.) Include because we're already using iterator_traits. Then, store the result of subtracting two RanIts as difference_type instead of long (which truncates on LLP64 architectures like MSVC x64). test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_flist.pass.cpp test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_one.pass.cpp (Affects 64-bit architectures.) Include so we can store the result of subtracting two pointers as std::ptrdiff_t (instead of int). test/std/input.output/iostream.format/input.streams/istream.unformatted/ignore_0xff.pass.cpp (Affects 32-bit architectures.) Sometimes, size_t is too small. That's the case here, where tellg() returns pos_type (N4606 27.7.2.3 [istream.unformatted]/39). Implementations can have 64-bit pos_type (to handle large files) even when they have 32-bit size_t. Fixes D27543. llvm-svn: 289110 --- .../alg.random.shuffle/random_shuffle_rand.pass.cpp | 3 ++- libcxx/test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp | 5 ++++- .../algorithms/alg.sorting/alg.sort/stable.sort/stable_sort.pass.cpp | 5 ++++- .../forwardlist/forwardlist.ops/splice_after_flist.pass.cpp | 5 +++-- .../sequences/forwardlist/forwardlist.ops/splice_after_one.pass.cpp | 5 +++-- .../input.streams/istream.unformatted/ignore_0xff.pass.cpp | 4 ++-- 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/libcxx/test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle_rand.pass.cpp b/libcxx/test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle_rand.pass.cpp index 967b6e3..c923d847 100644 --- a/libcxx/test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle_rand.pass.cpp +++ b/libcxx/test/std/algorithms/alg.modifying.operations/alg.random.shuffle/random_shuffle_rand.pass.cpp @@ -17,12 +17,13 @@ #include #include +#include #include "test_macros.h" struct gen { - int operator()(int n) + std::ptrdiff_t operator()(std::ptrdiff_t n) { return n-1; } diff --git a/libcxx/test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp b/libcxx/test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp index ebb8767..ea1e7df 100644 --- a/libcxx/test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp +++ b/libcxx/test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp @@ -16,6 +16,7 @@ // sort(Iter first, Iter last); #include +#include #include template @@ -23,9 +24,11 @@ void test_sort_helper(RI f, RI l) { typedef typename std::iterator_traits::value_type value_type; + typedef typename std::iterator_traits::difference_type difference_type; + if (f != l) { - long len = l - f; + difference_type len = l - f; value_type* save(new value_type[len]); do { diff --git a/libcxx/test/std/algorithms/alg.sorting/alg.sort/stable.sort/stable_sort.pass.cpp b/libcxx/test/std/algorithms/alg.sorting/alg.sort/stable.sort/stable_sort.pass.cpp index 2721c9c..74a876c 100644 --- a/libcxx/test/std/algorithms/alg.sorting/alg.sort/stable.sort/stable_sort.pass.cpp +++ b/libcxx/test/std/algorithms/alg.sorting/alg.sort/stable.sort/stable_sort.pass.cpp @@ -16,6 +16,7 @@ // stable_sort(Iter first, Iter last); #include +#include #include template @@ -23,9 +24,11 @@ void test_sort_helper(RI f, RI l) { typedef typename std::iterator_traits::value_type value_type; + typedef typename std::iterator_traits::difference_type difference_type; + if (f != l) { - long len = l - f; + difference_type len = l - f; value_type* save(new value_type[len]); do { diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_flist.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_flist.pass.cpp index c8d4e2d..eec9e42 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_flist.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_flist.pass.cpp @@ -14,14 +14,15 @@ #include #include #include +#include #include "min_allocator.h" typedef int T; const T t1[] = {0, 1, 2, 3, 4, 5, 6, 7}; const T t2[] = {10, 11, 12, 13, 14, 15}; -const int size_t1 = std::end(t1) - std::begin(t1); -const int size_t2 = std::end(t2) - std::begin(t2); +const std::ptrdiff_t size_t1 = std::end(t1) - std::begin(t1); +const std::ptrdiff_t size_t2 = std::end(t2) - std::begin(t2); template void diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_one.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_one.pass.cpp index 349a387..cc86c96 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_one.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.ops/splice_after_one.pass.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include "test_macros.h" #include "min_allocator.h" @@ -21,8 +22,8 @@ typedef int T; const T t1[] = {0, 1, 2, 3, 4, 5, 6, 7}; const T t2[] = {10, 11, 12}; -const int size_t1 = std::end(t1) - std::begin(t1); -const int size_t2 = std::end(t2) - std::begin(t2); +const std::ptrdiff_t size_t1 = std::end(t1) - std::begin(t1); +const std::ptrdiff_t size_t2 = std::end(t2) - std::begin(t2); template void diff --git a/libcxx/test/std/input.output/iostream.format/input.streams/istream.unformatted/ignore_0xff.pass.cpp b/libcxx/test/std/input.output/iostream.format/input.streams/istream.unformatted/ignore_0xff.pass.cpp index e498172..ed68279 100644 --- a/libcxx/test/std/input.output/iostream.format/input.streams/istream.unformatted/ignore_0xff.pass.cpp +++ b/libcxx/test/std/input.output/iostream.format/input.streams/istream.unformatted/ignore_0xff.pass.cpp @@ -27,8 +27,8 @@ int main() std::istringstream is(s); const unsigned int ignoreLen=10; - size_t a=is.tellg(); + std::istringstream::pos_type a=is.tellg(); is.ignore(ignoreLen); - size_t b=is.tellg(); + std::istringstream::pos_type b=is.tellg(); assert((b-a)==ignoreLen); } -- 2.7.4