[PATCH] D27025: [libcxx] [test] Fix MSVC warning C4389 "signed/unsigned mismatch", part 12/12.

Stephan T. Lavavej via cfe-commits cfe-commits at lists.llvm.org
Tue Nov 22 16:55:55 PST 2016


STL_MSFT created this revision.
STL_MSFT added reviewers: EricWF, mclow.lists.
STL_MSFT added a subscriber: cfe-commits.
Herald added a subscriber: mehdi_amini.

[libcxx] [test] Fix MSVC warning C4389 "signed/unsigned mismatch", part 12/12.

Various changes:

test/std/algorithms/alg.sorting/alg.merge/inplace_merge.pass.cpp
This is comparing value_type to unsigned. value_type is sometimes int and sometimes struct S (implicitly constructible from int).
static_cast<value_type>(unsigned) silences the warning and doesn't do anything bad (as the values in question are small).

test/std/algorithms/alg.sorting/alg.nth.element/nth_element_comp.pass.cpp
This is comparing an int remote-element to size_t. The values in question are small and non-negative,
so either type is fine. I think that converting int to size_t is marginally better here than the reverse.

test/std/containers/sequences/deque/deque.cons/size.pass.cpp
DefaultOnly::count is int (and non-negative). When comparing to unsigned, use static_cast<unsigned>.

test/std/strings/basic.string/string.access/index.pass.cpp
We're comparing char to '0' through '9', but formed with the type size_t. Add static_cast<char>.

test/std/utilities/template.bitset/bitset.cons/ull_ctor.pass.cpp
Include <cstddef> for pedantic correctness (this test was already mentioning std::size_t).

"v[i] == (i & 1)" was comparing bool to size_t. Saying "v[i] == ((i & 1) != 0)" smashes the RHS to bool.


https://reviews.llvm.org/D27025

Files:
  test/std/algorithms/alg.sorting/alg.merge/inplace_merge.pass.cpp
  test/std/algorithms/alg.sorting/alg.nth.element/nth_element_comp.pass.cpp
  test/std/containers/sequences/deque/deque.cons/size.pass.cpp
  test/std/strings/basic.string/string.access/index.pass.cpp
  test/std/utilities/template.bitset/bitset.cons/ull_ctor.pass.cpp


Index: test/std/utilities/template.bitset/bitset.cons/ull_ctor.pass.cpp
===================================================================
--- test/std/utilities/template.bitset/bitset.cons/ull_ctor.pass.cpp
+++ test/std/utilities/template.bitset/bitset.cons/ull_ctor.pass.cpp
@@ -12,6 +12,7 @@
 #include <bitset>
 #include <cassert>
 #include <algorithm> // for 'min' and 'max'
+#include <cstddef>
 
 #include "test_macros.h"
 
@@ -23,7 +24,7 @@
         assert(v.size() == N);
         unsigned M = std::min<std::size_t>(N, 64);
         for (std::size_t i = 0; i < M; ++i)
-            assert(v[i] == (i & 1));
+            assert(v[i] == ((i & 1) != 0));
         for (std::size_t i = M; i < N; ++i)
             assert(v[i] == false);
     }
Index: test/std/strings/basic.string/string.access/index.pass.cpp
===================================================================
--- test/std/strings/basic.string/string.access/index.pass.cpp
+++ test/std/strings/basic.string/string.access/index.pass.cpp
@@ -29,7 +29,7 @@
     const S& cs = s;
     for (S::size_type i = 0; i < cs.size(); ++i)
     {
-        assert(s[i] == '0' + i);
+        assert(s[i] == static_cast<char>('0' + i));
         assert(cs[i] == s[i]);
     }
     assert(cs[cs.size()] == '\0');
@@ -43,7 +43,7 @@
     const S& cs = s;
     for (S::size_type i = 0; i < cs.size(); ++i)
     {
-        assert(s[i] == '0' + i);
+        assert(s[i] == static_cast<char>('0' + i));
         assert(cs[i] == s[i]);
     }
     assert(cs[cs.size()] == '\0');
Index: test/std/containers/sequences/deque/deque.cons/size.pass.cpp
===================================================================
--- test/std/containers/sequences/deque/deque.cons/size.pass.cpp
+++ test/std/containers/sequences/deque/deque.cons/size.pass.cpp
@@ -30,7 +30,7 @@
     assert(DefaultOnly::count == 0);
     {
     C d(n, Allocator());
-    assert(DefaultOnly::count == n);
+    assert(static_cast<unsigned>(DefaultOnly::count) == n);
     assert(d.size() == n);
     assert(static_cast<std::size_t>(distance(d.begin(), d.end())) == d.size());
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
@@ -51,7 +51,7 @@
     assert(DefaultOnly::count == 0);
     {
     C d(n);
-    assert(DefaultOnly::count == n);
+    assert(static_cast<unsigned>(DefaultOnly::count) == n);
     assert(d.size() == n);
     assert(static_cast<std::size_t>(distance(d.begin(), d.end())) == d.size());
 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Index: test/std/algorithms/alg.sorting/alg.nth.element/nth_element_comp.pass.cpp
===================================================================
--- test/std/algorithms/alg.sorting/alg.nth.element/nth_element_comp.pass.cpp
+++ test/std/algorithms/alg.sorting/alg.nth.element/nth_element_comp.pass.cpp
@@ -81,7 +81,7 @@
     for (int i = 0; static_cast<std::size_t>(i) < v.size(); ++i)
         v[i].reset(new int(i));
     std::nth_element(v.begin(), v.begin() + v.size()/2, v.end(), indirect_less());
-    assert(*v[v.size()/2] == v.size()/2);
+    assert(static_cast<std::size_t>(*v[v.size()/2]) == v.size()/2);
     }
 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
 }
Index: test/std/algorithms/alg.sorting/alg.merge/inplace_merge.pass.cpp
===================================================================
--- test/std/algorithms/alg.sorting/alg.merge/inplace_merge.pass.cpp
+++ test/std/algorithms/alg.sorting/alg.merge/inplace_merge.pass.cpp
@@ -58,7 +58,7 @@
     if(N > 0)
     {
         assert(ia[0] == 0);
-        assert(ia[N-1] == N-1);
+        assert(ia[N-1] == static_cast<value_type>(N-1));
         assert(std::is_sorted(ia, ia+N));
     }
     delete [] ia;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D27025.78995.patch
Type: text/x-patch
Size: 3637 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161123/f15d9cab/attachment-0001.bin>


More information about the cfe-commits mailing list