Commit Graph

3520 Commits

Author SHA1 Message Date
Eric Fiselier
50f6579e74 fix sign comparison warnings
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290469 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 00:24:44 +00:00
Eric Fiselier
0e5ebbc77c Fix unused parameters and variables
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290459 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 23:37:52 +00:00
Eric Fiselier
17a98d8a92 Don't use posix_memalign on Windows platforms
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290448 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 20:17:23 +00:00
Eric Fiselier
5ac2f14809 Fix PR31440: Make __sanitizer_annotate_contigious_container always visible. Fix from Jan Beich
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290447 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 20:03:52 +00:00
Eric Fiselier
0de917eac4 Update doc and various cleanup
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290446 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 20:00:13 +00:00
Eric Fiselier
59c5cb0116 Add test that _LIBCPP_VERSION matches __libcpp_version
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290445 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 19:38:43 +00:00
Eric Fiselier
8f7a9c085a Add release update instructions for libc++
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290444 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 19:30:24 +00:00
Eric Fiselier
904a9cb99d Update TestingLibcxx doc to reflect the use_system_cxx_lib flag. Patch from Michael Park
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290441 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 19:09:14 +00:00
Eric Fiselier
20ace04348 Add apple-clang-8 to list of XFAILS for some variant tests. Patch from Michael Park
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290440 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 19:07:54 +00:00
Chris Bieneman
a4b3552a4d [CMake] Fix issue reported on sanitizer bots
This should resolve an issue reported on the commit thread that impacted sanitizer bots.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290052 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-17 21:28:24 +00:00
Chris Bieneman
801aa91790 [CMake] Put headers relative to clang
When libcxx isn't building with an installed LLVM we copy the libcxx headers into the LLVM build directory so that a clang in that build tree can find the headers relative to itself.

This is only important in situations where you don't have headers installed under /, which is common these days on Darwin.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289963 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-16 17:30:51 +00:00
Eric Fiselier
1d0d379c40 Fix XFAILS for is_trivially_destructible trait
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289802 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-15 11:00:07 +00:00
Eric Fiselier
b7fe139a72 Fix typo
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289781 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-15 07:23:44 +00:00
Eric Fiselier
cdc59e576e Add tests for LWG 2796
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289780 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-15 07:15:39 +00:00
Eric Fiselier
90314c55d1 Add more test cases for PR31384
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289778 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-15 07:05:19 +00:00
Eric Fiselier
1739d3ef0a Add test case for PR31384
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289774 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-15 06:38:07 +00:00
Eric Fiselier
9663ee4d4f Revert r289727 due to PR31384
This patch reverts the changes to tuple which fixed construction from
types derived from tuple. It breaks the code mentioned in llvm.org/PR31384.
I'll follow this commit up with a test case.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289773 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-15 06:34:54 +00:00
Eric Fiselier
4a435415ad XFAIL test for more apple-clang versions
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289767 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-15 05:41:07 +00:00
Eric Fiselier
c480bc55cd Work around bug in initialization of std::array base class with older clangs
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289741 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-14 23:24:12 +00:00
Eric Fiselier
bad1d6c248 Fix PR31378 - std::list::remove should not require a default constructible allocator.
In list::remove we collect the nodes we're removing in a seperate
list instance. However we construct this list using the default
constructor which default constructs the allocator. However allocators
are not required to be default constructible. This patch fixes the
construction of the second list.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289735 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-14 22:48:38 +00:00
Stephan T. Lavavej
7b7dedb244 [libcxx] [test] Fix MSVC x64 truncation warnings with 32-bit allocator size_type/difference_type.
test/std/containers/container.adaptors/queue/queue.cons.alloc/ctor_container_alloc.pass.cpp
test/std/containers/container.adaptors/stack/stack.cons.alloc/ctor_container_alloc.pass.cpp
Iterate with C::size_type because that's what operator[] takes.

test/std/containers/sequences/vector/contiguous.pass.cpp
test/std/strings/basic.string/string.require/contiguous.pass.cpp
Add static_cast<typename C::difference_type> because that's what the iterator's operator+ takes.

Fixes D27777.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289734 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-14 22:46:46 +00:00
Eric Fiselier
18e56b438e [libcxx] Fix tuple construction/assignment from types derived from tuple/pair/array.
Summary:
The standard requires tuple have the following constructors:
```
tuple(tuple<OtherTypes...> const&);
tuple(tuple<OtherTypes...> &&);
tuple(pair<T1, T2> const&);
tuple(pair<T1, T2> &&);
tuple(array<T, N> const&);
tuple(array<T, N> &&);
```
However libc++ implements these as a single constructor with the signature:
```
template <class TupleLike, enable_if_t<__is_tuple_like<TupleLike>::value>>
tuple(TupleLike&&);
```

This causes the constructor to reject types derived from tuple-like types; Unlike if we had all of the concrete overloads, because they cause the derived->base conversion in the signature.

This patch fixes this issue by detecting derived types and the tuple-like base they are derived from. It does this by creating an overloaded function with signatures for each of tuple/pair/array and checking if the possibly derived type can convert to any of them.

This patch fixes [PR17550]( https://llvm.org/bugs/show_bug.cgi?id=17550)

This patch 

Reviewers: mclow.lists, K-ballo, mpark, EricWF

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D27606

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289727 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-14 22:22:38 +00:00
Eric Fiselier
a793c18bae XFAIL test on apple-clang-7.0
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289716 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-14 21:44:08 +00:00
Eric Fiselier
ff62475dcd [libcxx] Fix PR24075, PR23841 - Add scoped_allocator_adaptor::construct(pair<T, U>*, ...) overloads.
Summary:
For more information see:

* https://llvm.org/bugs/show_bug.cgi?id=23841
* https://llvm.org/bugs/show_bug.cgi?id=24075

I hope you have as much fun reviewing as I did writing these insane tests!

Reviewers: mclow.lists, AlisdairM, EricWF

Subscribers: AlisdairM, Potatoswatter, cfe-commits

Differential Revision: https://reviews.llvm.org/D27612

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289710 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-14 21:29:29 +00:00
Eric Fiselier
6d95982406 Recommit r286884: P0503R0, adopted in Issaquah, rewords some requirements on nullptr_t and istream_iterator.
No code changes were needed, but I updated a few tests.
Also resolved P0509 and P0521, which required no changes to the library or tests.

This patch was reverted due to llvm.org/PR31016. There is a bug in Clang 3.7
which causes default.pass.cpp to fails. That test is now marked as XFAIL for that
clang version.

This patch was originally authored by Marshall Clow.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289708 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-14 21:22:48 +00:00
Stephan T. Lavavej
4d6f42350e [libcxx] [test] Fix size_t-to-int truncation warnings in syserr.hash.
After r289363, these tests were triggering MSVC x64 warning C4267
"conversion from 'size_t' to 'int', possible loss of data" by taking 0, 2, and 10
as std::size_t, then constructing error_code(int, const error_category&) or
error_condition(int, const error_category&) from that (N4618 19.5.3.2
[syserr.errcode.constructors]/3, 19.5.4.2 [syserr.errcondition.constructors]/3).

The fix is simple: take these ints as int, pass them to the int-taking
constructor, and perform a value-preserving static_cast<std::size_t>
when comparing them to `std::size_t result`.

Fixes D27691.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289512 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-13 01:54:58 +00:00
Stephan T. Lavavej
b988a6fb41 [libcxx] [test] Change ifstream constructor tests to handle read-only files.
Certain source control systems like to set the read-only bit on their files,
which interferes with opening "test.dat" for both input and output.
Fortunately, we can work around this without losing test coverage.
Now, the ifstream.cons tests have comments referring to the ofstream.cons tests.
There, we're creating writable files (not checked into source control),
where the ifstream constructor tests will succeed.

Fixes D26814.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289463 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-12 19:50:22 +00:00
Stephan T. Lavavej
fbbec294b0 [libcxx] [test] Fix an improper assumption about Null Forward Iterators.
Value-initialized iterators still can't be compared to those with parents.

Fixes D26626.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289462 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-12 19:50:14 +00:00
Petr Hosek
513447dbb9 [libcxx][CMake] Move the warning to HandleOutOfTreeLLVM
This currently gives a warning when building libcxx under runtimes.

Differential Revision: https://reviews.llvm.org/D27643

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289418 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-12 05:05:46 +00:00
Eric Fiselier
d8e3e932bf Actually re-disable -Wsign-compare
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289367 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 05:54:43 +00:00
Eric Fiselier
ab804f1b7d Re-disable -Wsign-compare for now. I didn't catch all occurrences
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289366 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 05:45:55 +00:00
Eric Fiselier
a2cd270943 Enable the -Wsign-compare warning to better support MSVC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289363 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 05:31:00 +00:00
Eric Fiselier
47dfc5940d Fix copy/paste errors introduced in r289358
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289359 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 04:00:26 +00:00
Eric Fiselier
11f64dcc58 Fix undefined behavior in container swap tests.
These swap tests were swapping non-POCS non-equal allocators which
is undefined behavior. This patch changes the tests to use allocators
which compare equal. In order to test that the allocators were not
swapped I added an "id" field to test_allocator which does not
participate in equality but does propagate across copies/swaps.

This patch is based off of D26623 which was submitted by STL.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289358 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 03:41:12 +00:00
Eric Fiselier
12a450ff3b Fix yet another dynamic exception spec
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289357 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 02:49:37 +00:00
Eric Fiselier
e5bca2ba66 Fix more uses of dynamic exception specifications in C++17
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289356 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 02:47:36 +00:00
Eric Fiselier
b61c998ece Fix count_new.hpp to work w/o dynamic exception specifications
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289355 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 02:20:17 +00:00
Eric Fiselier
3e99c8b0af [libc++] Fix support for multibyte thousands_sep and decimal_point in moneypunct_byname and numpunct_byname.
Summary:
The underlying C locales provide the `thousands_sep` and `decimal_point` as strings, possible with more than one character. We currently don't handle this case even for `wchar_t`.

This patch properly converts the mbs -> wide character for `moneypunct_byname<wchar_t>`. For the `moneypunct_byname<char>` case we attempt to narrow the WC and if that fails we also attempt to translate it to some reasonable value. For example we translate U00A0 (non-breaking space) into U0020 (regular space). If none of these conversions succeed then we simply allow the base class to provide a fallback value.


Reviewers: mclow.lists, EricWF

Subscribers: vangyzen, george.burgess.iv, cfe-commits

Differential Revision: https://reviews.llvm.org/D24218

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289347 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 00:20:59 +00:00
Stephan T. Lavavej
eae7e51a7d [libcxx] [test] Fix string_view tests.
test/std/strings/string.view/string.view.ops/compare.pointer_size.pass.cpp
Passing -1 to size_t triggers signed/unsigned mismatch warnings because it's
a value-modifying conversion. Add static_cast<size_t> to soothe the compiler.
(This file refers to size_t unqualified.)

test/std/strings/string.view/string.view.ops/substr.pass.cpp
Add <algorithm> for std::min() and <stdexcept> for std::out_of_range.

N4618 21.4.2.4 [string.view.access]/1: "Requires: pos < size()."
/4: "[ Note: Unlike basic_string::operator[], basic_string_view::operator[](size())
has undefined behavior instead of returning charT(). -end note ]"

Fixes D27633.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289283 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-09 22:35:53 +00:00
Stephan T. Lavavej
aa1d62b4af [libcxx] [test] Add LIBCPP_ASSERT_NOEXCEPT/LIBCPP_ASSERT_NOT_NOEXCEPT, remove an unused variable.
test/support/test_macros.h
For convenience/greppability, add macros for libcxx-specific static_asserts about noexceptness.

(Moving the definitions of ASSERT_NOEXCEPT/ASSERT_NOT_NOEXCEPT isn't technically necessary
because they're macros, but I think it's better style to define stuff before using it.)

test/std/utilities/tuple/tuple.tuple/tuple.apply/apply.pass.cpp
There was a completely unused `TrackedCallable obj;`.

apply() isn't depicted with conditional noexcept in C++17.

test/std/utilities/tuple/tuple.tuple/tuple.apply/make_from_tuple.pass.cpp
Now that we have LIBCPP_ASSERT_NOEXCEPT, use it.

Fixes D27622.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289264 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-09 19:53:08 +00:00
Eric Fiselier
2fe522f79a Update doc version to 4.0
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289206 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-09 12:33:49 +00:00
Eric Fiselier
8cdac0b885 [NFC] Change whitespace to force docs rebuild
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289205 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-09 12:32:02 +00:00
Eric Fiselier
bf3b8e226e Fix missing const on set::count. Patch from Andrey Khalyavin
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289204 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-09 12:17:31 +00:00
Eric Fiselier
e386ad3090 Refactor uses_allocator test types for upcoming fixes
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289197 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-09 09:51:09 +00:00
Eric Fiselier
11715ba8e2 Put C++ ABI headers in a special build directory instead of the top level.
This patch changes where the C++ ABI headers are put during the build. Previously
    they were put in the top level include directory (not the libc++ header directory).
    However that just polutes the top level directory. Instead this patch creates a special
    directory to put them in. The reason they can't be put under c++/v1 until after the build
    is because libc++ uses the in-source headers, so we can't add the include path of the libc++
    headers in the object dir.

    Additionally this patch teaches the test suite how to find the ABI headers,
    and adds a demangling utility to help debug tests with.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289195 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-09 09:31:01 +00:00
Eric Fiselier
5a6eaee517 fix misspelling in .clang-format
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289178 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-09 03:18:45 +00:00
Eric Fiselier
f178c261f4 Turn off header sorting and comment formatting
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289177 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-09 03:17:25 +00:00
Eric Fiselier
f2f3637d40 Fix PR27374 - Remove the implicit reduced-arity-extension in tuple.
This patch removes libc++'s tuple extension which allowed it to be
constructed from fewer initializers than elements; with the remaining
elements being default constructed. However the implicit version of
this extension breaks conforming code. For example:

    int fun(std::string);
    int fun(std::tuple<std::string, int>);
    int x = fun("hello"); // ambigious

Because existing code may already depend on this extension it can be re-enabled
by defining _LIBCPP_ENABLE_TUPLE_IMPLICIT_REDUCED_ARITY_EXTENSION.

Note that the explicit version of this extension is still supported,
although it's somewhat less useful than the implicit one.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289158 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 23:57:08 +00:00
Stephan T. Lavavej
3e541a6172 [libcxx] [test] Fix MSVC warning C4244 "conversion from 'X' to 'Y', possible loss of data", part 7/7.
test/std/input.output/iostream.format/input.streams/istream.unformatted/get.pass.cpp
Add static_cast<char> because basic_istream::get() returns int_type (N4606 27.7.2.3 [istream.unformatted]/4).

test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/minus1.pass.cpp
Add static_cast<char> because toupper() returns int (C11 7.4.2.2/1).

test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.ops/assign_t.pass.cpp
This test is intentionally writing doubles to ostream_iterator<int>.
It's silencing -Wliteral-conversion for Clang, so I'm adding C4244 silencing for MSVC.

test/std/language.support/support.limits/limits/numeric.limits.members/infinity.pass.cpp
Given `extern float zero;`, the expression `1./zero` has type double, which emits a truncation warning
when being passed to test<float>() taking float. The fix is to say `1.f/zero` which has type float.

test/std/numerics/complex.number/cmplx.over/arg.pass.cpp
test/std/numerics/complex.number/cmplx.over/norm.pass.cpp
These tests were constructing std::complex<double>(x, 0), emitting truncation warnings when x is long long.
Saying static_cast<double>(x) avoids this.

test/std/numerics/rand/rand.eng/rand.eng.lcong/seed_result_type.pass.cpp
This was using `int s` to construct and seed a linear_congruential_engine<T, stuff>, where T is
unsigned short/unsigned int/unsigned long/unsigned long long. That emits a truncation warning in the
unsigned short case. Because the range [0, 20) is tiny and we aren't doing anything else with the index,
we can just iterate with `T s`.

test/std/re/re.traits/value.pass.cpp
regex_traits<wchar_t>::value()'s first parameter is wchar_t (N4606 28.7 [re.traits]/13). This loop is
using int to iterate through ['g', 0xFFFF), emitting a truncation warning from int to wchar_t
(which is 16-bit for some of us). Because the bound is exclusive, we can just iterate with wchar_t.

test/std/strings/basic.string/string.cons/size_char_alloc.pass.cpp
This test is a little strange. It's trying to verify that basic_string's (InIt, InIt) range constructor
isn't confused by "N copies of C" when N and C have the same integral type. To do this, it was
testing (100, 65), but that eventually emits truncation warnings from int to char. There's a simple way
to avoid this - passing (static_cast<char>(100), static_cast<char>(65)) also exercises the disambiguation.
(And 100 is representable even when char has a signed range.)

test/std/strings/string.view/string.view.hash/string_view.pass.cpp
Add static_cast<char_type> because `'0' + i` has type int.

test/std/utilities/function.objects/bind/func.bind/func.bind.bind/nested.pass.cpp
What's more horrible than nested bind()? pow() overloads! This operator()(T a, T b) was assuming that
std::pow(a, b) can be returned as T. (In this case, T is int.) However, N4606 26.9.1 [cmath.syn]/2
says that pow(int, int) returns double, so this was truncating double to int.
Adding static_cast<T> silences this.

test/std/utilities/function.objects/unord.hash/integral.pass.cpp
This was iterating `for (int i = 0; i <= 5; ++i)` and constructing `T t(i);` but that's truncating
when T is short. (And super truncating when T is bool.) Adding static_cast<T> silences this.

test/std/utilities/utility/exchange/exchange.pass.cpp
First, this was exchanging 67.2 into an int, but that's inherently truncating.
Changing this to static_cast<short>(67) avoids the truncation while preserving the
"what if T and U are different" test coverage.
Second, this was exchanging {} with the explicit type float into an int, and that's also
inherently truncating. Specifying short is just as good.

test/std/utilities/utility/pairs/pairs.spec/make_pair.pass.cpp
Add static_cast<short>. Note that this affects template argument deduction for make_pair(),
better fulfilling the test's intent. For example, this was saying
`typedef std::pair<int, short> P1; P1 p1 = std::make_pair(3, 4);` but that was asking
make_pair() to return pair<int, int>, which was then being converted to pair<int, short>.
(pair's converting constructors are tested elsewhere.)
Now, std::make_pair(3, static_cast<short>(4)) actually returns pair<int, short>.
(There's still a conversion from pair<nullptr_t, short> to pair<unique_ptr<int>, short>.)

Fixes D27544.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289111 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 21:38:57 +00:00
Stephan T. Lavavej
f1cc7ff4c9 [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 <cstddef> 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 <iterator> 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 <cstddef> 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.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289110 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 21:38:44 +00:00