Commit Graph

1952 Commits

Author SHA1 Message Date
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
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
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
Stephan T. Lavavej
0e8cbce107 [libcxx] [test] Fix MSVC warning C4244 "conversion from 'X' to 'Y', possible loss of data", part 5/7.
Instead of storing double in double and then truncating to int, store int in long
and then widen to long long. This preserves test coverage (as these tests are
interested in various tuple conversions) while avoiding truncation warnings.

test/std/utilities/tuple/tuple.tuple/tuple.cnstr/const_pair.pass.cpp
Since we aren't physically truncating anymore, t1 is equal to p0.

test/std/utilities/tuple/tuple.tuple/tuple.cnstr/convert_copy.pass.cpp
One edit is different from the usual pattern. Previously, we were storing
double in double and then converting to A, which has an implicitly converting
constructor from int. Now, we're storing int in int and then converting to A,
avoiding the truncation.

Fixes D27542.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289109 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 21:38:32 +00:00
Stephan T. Lavavej
62cd72c4e6 [libcxx] [test] Fix MSVC warning C4244 "conversion from 'X' to 'Y', possible loss of data", part 4/7.
Change char to long and remove some char casts. This preserves test coverage for tuple's
heterogeneous comparisons, while avoiding int-to-char truncation warnings.

Fixes D27541.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289108 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 21:38:23 +00:00
Stephan T. Lavavej
f008c5389e [libcxx] [test] Fix MSVC warning C4244 "conversion from 'X' to 'Y', possible loss of data", part 3/7.
Add static_cast<short> when constructing pair<Whatever, short> from (Something, int).

Fixes D27540.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289107 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 21:38:14 +00:00
Stephan T. Lavavej
637a6f6005 [libcxx] [test] Fix MSVC warning C4244 "conversion from 'X' to 'Y', possible loss of data", part 2/7.
These tests for some guy's transparent operator functors were needlessly truncating their
double results to int. Preserving the doubleness makes compilers happier. I'm following
existing practice by adding an "// exact in binary" comment when the result isn't a whole number.
(The changes from 6 to 6.0 and so forth are stylistic, not critical.)

Fixes D27539.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289106 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 21:38:01 +00:00
Stephan T. Lavavej
c53fd92b0f [libcxx] [test] Fix MSVC warning C4244 "conversion from 'X' to 'Y', possible loss of data", part 1/7.
Given `std::basic_streambuf<CharT>::int_type __c`, `std::basic_string<CharT> str_`,
and having checked `__c != std::basic_streambuf<CharT>::traits_type::eof()` (substituting typedefs
for clarity), the line `str_.push_back(__c);` is safe according to humans, but truncates according
to compilers. `str_.push_back(static_cast<CharT>(__c));` avoids that problem.

Fixes D27538.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289105 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 21:37:47 +00:00
Eric Fiselier
22e3b2af50 Add more test cases to packaged_task copyability test
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289034 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 10:02:04 +00:00
Eric Fiselier
52b1b17336 Avoid C++17 guaranteed copy elision when testing for non-copyability
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289033 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 09:57:00 +00:00
Casey Carter
86e9c5f13d std::get<0>([std::variant constant expression]) *is* noexcept.
Differential review: http://reviews.llvm.org/D27436

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288760 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 02:28:19 +00:00
Stephan T. Lavavej
6504ee5755 [libcxx] [test] D27269: Fix MSVC x64 warning C4267 "conversion from 'size_t' to 'int' [or 'unsigned int'], possible loss of data", part 3/4.
test/std/containers/sequences/vector.bool/copy.pass.cpp
test/std/containers/sequences/vector.bool/copy_alloc.pass.cpp
test/std/containers/sequences/vector/vector.cons/copy.pass.cpp
test/std/containers/sequences/vector/vector.cons/copy_alloc.pass.cpp
Change "unsigned s = x.size();" to "typename C::size_type s = x.size();"
because that's what it returns.

test/std/strings/basic.string/string.cons/pointer_alloc.pass.cpp
Include <cstddef>, then change "unsigned n = T::length(s);"
to "std::size_t n = T::length(s);" because that's what char_traits returns.

test/std/strings/basic.string/string.cons/substr.pass.cpp
Change unsigned to typename S::size_type because that's what str.size() returns.

test/std/utilities/template.bitset/bitset.cons/ull_ctor.pass.cpp
This was needlessly truncating std::size_t to unsigned.
It's being used to compare and initialize std::size_t.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288753 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:14:51 +00:00
Stephan T. Lavavej
ae5809a70c [libcxx] [test] D27268: Fix MSVC x64 warning C4267 "conversion from 'size_t' to 'int' [or 'unsigned int'], possible loss of data", part 2/4.
Use static_cast<int> when storing size_t in int (or passing size_t to int).

Also, remove a spurious semicolon in test/support/archetypes.hpp.

test/support/count_new.hpp
Additionally, change data members (and parameters) to size_t.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288752 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:14:43 +00:00
Stephan T. Lavavej
7a477f5886 [libcxx] [test] D27267: Fix MSVC x64 warning C4267 "conversion from 'size_t' to 'int' [or 'unsigned int'], possible loss of data", part 1/4.
Replace "int n = str_.size();" with "int n = static_cast<int>(str_.size());".

int is the correct type to use, because we're eventually calling
"base::pbump(n+1);" where base is std::basic_streambuf.
N4606 27.6.3.3.3 [streambuf.put.area]/4 declares: "void pbump(int n);"

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288751 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:14:29 +00:00
Stephan T. Lavavej
e2dbcaf969 [libcxx] [test] D27266: Remove spurious semicolons.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288750 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:14:06 +00:00
Stephan T. Lavavej
43d9250a01 [libcxx] [test] D27025: 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.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288749 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:13:51 +00:00
Stephan T. Lavavej
caa97ca11f [libcxx] [test] D27024: Fix MSVC warning C4389 "signed/unsigned mismatch", part 11/12.
Change "unsigned n = 0;" to "int n = 0;". It's being compared to int elements and ptrdiff_t distances.

test/std/containers/sequences/forwardlist/forwardlist.cons/move.pass.cpp
This one's a little special, but not really. "*i == n" is comparing MoveOnly to n.
MoveOnly is implicitly constructible from int, so int is the correct type to use here.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288748 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:13:40 +00:00
Stephan T. Lavavej
3bea61851a [libcxx] [test] D27023: Fix MSVC warning C4389 "signed/unsigned mismatch", part 10/12.
Add static_cast<int>. In these cases, the values are guaranteed to be small-ish,
and they're being compared to int elements.

test/std/containers/sequences/deque/deque.capacity/access.pass.cpp
Use int instead of unsigned to iterate from 0 to 10.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288747 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:13:29 +00:00
Stephan T. Lavavej
21208822a8 [libcxx] [test] D27022: Fix MSVC warning C4389 "signed/unsigned mismatch", part 9/12.
Add static_cast<std::size_t> to more comparisons. (Performed manually, unlike part 8/12.)

Also, include <cstddef> when it wasn't already being included.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288746 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:13:14 +00:00
Stephan T. Lavavej
98605940df [libcxx] [test] D27021: Fix MSVC warning C4389 "signed/unsigned mismatch", part 8/12.
Add static_cast<std::size_t> when comparing distance() to size().

These replacements were performed programmatically with regex_replace():

const vector<pair<regex, string>> reg_fmt = {
    { regex(R"(assert\((\w+)\.size\(\) == std::distance\((\w+, \w+)\)\))"),
        "assert($1.size() == static_cast<std::size_t>(std::distance($2)))" },
    { regex(R"(assert\(distance\((\w+\.begin\(\), \w+\.end\(\))\) == (\w+)\.size\(\)\))"),
        "assert(static_cast<std::size_t>(distance($1)) == $2.size())" },
    { regex(R"(assert\(std::distance\((\w+\.\w*begin\(\), \w+\.\w*end\(\))\) == (\w+)\.size\(\)\))"),
        "assert(static_cast<std::size_t>(std::distance($1)) == $2.size())" },
};

Also, include <cstddef> when it wasn't already being included.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288745 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:12:34 +00:00
Eric Fiselier
d95f62ecd2 Add support for writing -verify shell tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288743 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:02:15 +00:00
Eric Fiselier
c7011af19b Allow enabling/disabling testing with module using env LIBCXX_USE_MODULES=1
The Clang modules implementation breaks enough that libc++ needs an easy way
to enable/disable using modules on the Zorg builders. Editing Zorg itself
requires a buildmaster restart which only happens weekly. This patch
allows LIBCXX_USE_MODULES to be used to enable/disable the feature,
allowing the buildslave to disable it as need be.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288736 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 00:01:04 +00:00
Eric Fiselier
bca6de0e4e Adjust libc++ test infastructure to fully support modules
This patch overhalls the libc++ test format/configuration in order to fully support modules. By "fully support" I mean get almost all of the tests passing. The main hurdle for doing this is handling tests that `#define _LIBCPP_FOO` macros to test a different configuration. This patch deals with these tests in the following ways:

1. For tests that define single `_LIBCPP_ABI_FOO` macros have been annotated with `// MODULES_DEFINES: _LIBCPP_ABI_FOO`. This allows the test suite to define the macro on the command line so it uses a different set of modules.
2. Tests for libc++'s debug mode (which define custom `_LIBCPP_ASSERT`) are automatically detected by the test suite and are compiled and run with modules disabled.

This patch also cleans up how the `CXXCompiler` helper class handles enabling/disabling language features.

NOTE: This patch uses `LIT` features which were only committed to LLVM today. If this patch breaks running the libc++ tests you probably need to update LLVM.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288728 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-05 23:16:07 +00:00
Roger Ferrer Ibanez
d59e3c7fed Handle tests for noexcept that expect a false value
Under libcpp-no-exceptions, noexcept is trivially true. Some tests expect in
the usual setting to return false, so adjust them to expect true under
libcpp-no-exceptions.

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



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288660 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-05 11:05:09 +00:00
Eric Fiselier
c4599da258 Turn off testsuite warnings by default with GCC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288576 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-03 03:29:45 +00:00
Eric Fiselier
29616b3806 Work around more -Wshadow warnings
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288573 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-03 02:26:28 +00:00
Eric Fiselier
b8574af83c Revert workaround for Clang bug. Thanks to Richard for the quick fix
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288566 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-03 01:28:01 +00:00
Eric Fiselier
90ade0a661 Fix -Wshadow warnings and enable warnings by default for C++ >= 11
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288564 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-03 01:21:40 +00:00
Eric Fiselier
b0d421ae1e XFAIL variant tests for apple-clang
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288559 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-03 00:33:03 +00:00
Eric Fiselier
efc48515b4 Enable warnings by default for C++ >= 11 and fix -Wshadow occurances
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288557 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-03 00:27:13 +00:00
Eric Fiselier
ac5c826faf Work around Clang 3.8 bugs
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288556 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-03 00:13:33 +00:00
Eric Fiselier
120401a4e0 Make variant's index part of the hash value
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288554 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-02 23:38:31 +00:00
Eric Fiselier
cab2af8418 Implement C++17 <variant>. Patch from Michael Park!
This patch was reviewed as https://reviews.llvm.org/D23263.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288547 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-02 23:00:05 +00:00
Eric Fiselier
4dfe243dac Work around a bug in Clang's implementation of noexcept function types
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288544 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-02 22:30:52 +00:00
Eric Fiselier
7f2b2c8362 Fix copy/paste errors in new variant tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288538 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-02 21:32:35 +00:00
Eric Fiselier
08d07da127 Add tests for libc++'s constexpr variant copy/move extension
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288536 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-02 21:17:51 +00:00