summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std
Commit message (Collapse)AuthorAgeFilesLines
* [libc++] Try and prevent evaluation of `is_default_constructible` on tuples ↵Eric Fiselier2015-02-211-0/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | default constructor if it is not needed. Summary: Currently parts of the SFINAE on tuples default constructor always gets evaluated even when the default constructor is never called or instantiated. This can cause a hard compile error when a tuple is created with types that do not have a default constructor. Below is a self contained example using a pair like class. This code will not compile but probably should. ``` #include <type_traits> template <class T> struct IllFormedDefaultImp { IllFormedDefaultImp(T x) : value(x) {} constexpr IllFormedDefaultImp() {} T value; }; typedef IllFormedDefaultImp<int &> IllFormedDefault; template <class T, class U> struct pair { template <bool Dummy = true, class = typename std::enable_if< std::is_default_constructible<T>::value && std::is_default_constructible<U>::value && Dummy>::type > constexpr pair() : first(), second() {} pair(T const & t, U const & u) : first(t), second(u) {} T first; U second; }; int main() { int x = 1; IllFormedDefault v(x); pair<IllFormedDefault, IllFormedDefault> p(v, v); } ``` One way to fix this is to use `Dummy` in a more involved way in the constructor SFINAE. The following patch fixes these sorts of hard compile errors for tuple. Reviewers: mclow.lists, rsmith, K-ballo, EricWF Reviewed By: EricWF Subscribers: ldionne, cfe-commits Differential Revision: http://reviews.llvm.org/D7569 llvm-svn: 230120
* More on adding sized deallocation functions in libc++: Continuing from ↵Larisse Voufo2015-02-208-0/+736
| | | | | | r229281, this adds version guards and test cases. llvm-svn: 229968
* Mark more tuple tests as unsupported in C++98 && C++03Eric Fiselier2015-02-192-0/+4
| | | | llvm-svn: 229810
* [libcxx] Mark most tuple tests UNSUPPORTED for c++03 and c++98.Eric Fiselier2015-02-1952-12/+103
| | | | | | | | | | | | | | Summary: No declaration for the type `tuple` is given in c++03 or c++98 modes. Mark all tests that use the actual `tuple` type as UNSUPPORTED. Reviewers: jroelofs, mclow.lists, danalbert Reviewed By: danalbert Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D5956 llvm-svn: 229808
* [libc++] Fix PR20084 - std::is_function<void() const> failed.Eric Fiselier2015-02-181-13/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This patch introduces some black magic to detect const and volatile qualified function types such as `void () const`. The patch works in the following way: We first rule out any type that satisfies on of the following. These restrictions are important so that the test below works properly. * `is_class<_Tp>::value` * `is_union<_Tp>::value` * `is_void<_Tp>::value` * `is_reference<_Tp>::value` * `__is_nullptr_t<_Tp>::value` If none of the above is true we perform overload resolution on `__source<_Tp>(0)` to determine the return type. * If `_Tp&` is well-formed we select `_Tp& __source(int)`. `_Tp&` is only ill formed for cv void types and cv/ref qualified function types. * Otherwise we select `__dummy_type __source(...)`. Since we know `_Tp` cannot be void then it must be a function type. let `R` be the returned from `__source<_Tp>(0)`. We perform overload resolution on `__test<_Tp>(R)`. * If `R` is `__dummy_type` we call `true_type __test(__dummy_type)`. * if `R` is `_Tp&` and `_Tp&` decays to `_Tp*` we call `true_type __test(_Tp*)`. Only references to function types decay to a pointer of the same type. * In all other cases we call `false_type __test(...)`. `__source<_Tp>(0)` will try and form `_Tp&` in the return type. if `_Tp&` is not well formed the return type of `__source<_Tp>(0)` will be dummy type. `_Tp&` is only ill-formed for cv/ref qualified function types (and void which is dealt with elsewhere). This fixes PR20084 - http://llvm.org/bugs/show_bug.cgi?id=20084 Reviewers: rsmith, K-ballo, mclow.lists Reviewed By: mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D7573 llvm-svn: 229696
* [libcxx] Add <experimental/ratio>Eric Fiselier2015-02-178-0/+360
| | | | | | | | | | | | | | | | | Summary: This patch is pretty simple. It just adds the _v traits from <ratio>. The draft can be found here. Reviewers: jroelofs, K-ballo, mclow.lists Reviewed By: mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D7351 llvm-svn: 229509
* Rooting out more undefined behavior in char_traits.Marshall Clow2015-02-1316-0/+24
| | | | llvm-svn: 229119
* Move the test for zero-length into the char_traits (from string_view). Add ↵Marshall Clow2015-02-124-0/+4
| | | | | | tests to char_traits specializations llvm-svn: 228981
* Remove undefined behavior from test; specifically, compare(NULL, XXX, 0)Marshall Clow2015-02-121-1/+1
| | | | llvm-svn: 228928
* Remove undefined behavior from test; specifically, compare(NULL, XXX, 0). ↵Marshall Clow2015-02-121-2/+1
| | | | | | Thanks to Eric for the catch llvm-svn: 228927
* Need to wrap a bit in an ifdef, since there are no initializer_lists in C++03Marshall Clow2015-02-111-0/+2
| | | | llvm-svn: 228840
* Fix PR 22541: When values are equal, minmax should return the rightmost one ↵Marshall Clow2015-02-111-0/+35
| | | | | | in the initializer_list llvm-svn: 228839
* libc++ tests: wait_until.pass test sporadically fails (bug 21998)Eric Fiselier2015-02-112-194/+258
| | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Hello Howard, While running the libc++ tests on our ARM boards, we encounter sporadic failures of the two tests: test/std/thread/futures/futures.shared_future/wait_until.pass.cpp test/std/thread/futures/futures.unique_future/wait_until.pass.cpp The worker thread might not finish yet when the main thread checks its result. I filed the bug 21998 for this case: http://llvm.org/bugs/show_bug.cgi?id=21998 Would you be able to review this please? Thank you. Oleg Reviewers: howard.hinnant, mclow.lists, danalbert, jroelofs, EricWF Reviewed By: jroelofs, EricWF Subscribers: EricWF, mclow.lists, aemerson, llvm-commits Differential Revision: http://reviews.llvm.org/D6750 llvm-svn: 228783
* Add pragma system header to some experimental headers and add newlines to files.Eric Fiselier2015-02-101-1/+1
| | | | llvm-svn: 228712
* Fix more issues exposed by -pedantic-errors in c++03 modeEric Fiselier2015-02-1027-26/+28
| | | | llvm-svn: 228711
* Remove use of zero length arrays in tests. Get tests passing with ↵Eric Fiselier2015-02-108-228/+58
| | | | | | -pedantic-errors llvm-svn: 228706
* [libcxx] Fix PR 22468 - std::function<void()> does not accept ↵Eric Fiselier2015-02-104-0/+81
| | | | | | | | | | | | | | | | | | | non-void-returning functions Summary: The bug can be found here: http://llvm.org/bugs/show_bug.cgi?id=22468 `__invoke_void_return_wrapper` is needed to properly handle calling a function that returns a value but where the std::function return type is void. Without this '-Wsystem-headers' will cause `function::operator()(...)` to not compile. Reviewers: eugenis, K-ballo, mclow.lists Reviewed By: mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D7444 llvm-svn: 228705
* [libcxx] Properly convert the count arguments to the *_n algorithms before use.Eric Fiselier2015-02-105-11/+30
| | | | | | | | | | | | | | | | | Summary: The requirement on the `Size` type passed to *_n algorithms is that it is convertible to an integral type. This means we can't use a variable of type `Size` directly. Instead we need to convert it to an integral type first. The problem is finding out what integral type to convert it to. `__convert_to_integral` figures out what integral type to convert it to and performs the conversion, It also promotes the resulting integral type so that it is at least as big as an integer. `__convert_to_integral` also has a special case for converting enums. This should only work on non-scoped enumerations because it does not apply an explicit conversion from the enum to its underlying type. Reviewers: chandlerc, mclow.lists Reviewed By: mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D7449 llvm-svn: 228704
* Fix use of C++11 extensions in C++03 code.Eric Fiselier2015-02-102-1/+3
| | | | llvm-svn: 228698
* Get tests running with warnings. Fix warnings in headers and testsEric Fiselier2015-02-0523-16/+57
| | | | llvm-svn: 228344
* Test commit: remove whitespace at EOL.Dimitry Andric2015-02-051-1/+1
| | | | llvm-svn: 228280
* Fix alignment in tests for readability.Eric Fiselier2015-02-032-4/+4
| | | | llvm-svn: 228028
* [libcxx] Add <experimental/system_error>Eric Fiselier2015-02-033-0/+96
| | | | | | | | | | | | | | | | | | Summary: This patch just adds the variable templates in <experimental/system_error>. see: https://rawgit.com/cplusplus/fundamentals-ts/v1/fundamentals-ts.html#syserror Reviewers: jroelofs, danalbert, K-ballo, mclow.lists Reviewed By: mclow.lists Subscribers: chandlerc, cfe-commits Differential Revision: http://reviews.llvm.org/D7353 llvm-svn: 227973
* [libcxx] Add <experimental/chrono>Eric Fiselier2015-02-022-0/+68
| | | | | | | | | | | | | | | | | Summary: This patch adds <experimental/chrono> which only contains a single variable template. See: https://rawgit.com/cplusplus/fundamentals-ts/v1/fundamentals-ts.html#time Reviewers: jroelofs, danalbert, K-ballo, mclow.lists Reviewed By: mclow.lists Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D7352 llvm-svn: 227860
* Fix PR#22433. The algorithm is_partitioned was testing an item in the middle ↵Marshall Clow2015-02-021-5/+24
| | | | | | of the sequence twice. llvm-svn: 227824
* Fix PR#22427. The implementation of inplace_merge had a \'small data set\' ↵Marshall Clow2015-02-022-3/+12
| | | | | | optimization; if either half of the merge was small (i.e, less than 9 items), it did an inplace merge rather than allocating a buffer and doing a faster/smarter merge. However, this failed to satisfy the complexity requirements in the standard. Remove that code. Add tests to check the complexity, and add the same tests for std::merge, since we are in that section of the test suite anyway. llvm-svn: 227811
* Fix for PR22061 by K-balloMarshall Clow2015-01-281-3/+6
| | | | llvm-svn: 227384
* We had two identical files named 'MoveOnly.h' in the test suite. Move one to ↵Marshall Clow2015-01-28157-255/+155
| | | | | | support/, remove the other, and update all the tests that included them. No functionality change. llvm-svn: 227370
* Removed some tabs that snuck into the test suite. No functionality changeMarshall Clow2015-01-285-29/+29
| | | | llvm-svn: 227363
* Fix PR22366. When move-constructing an associative container and explicitly ↵Marshall Clow2015-01-284-0/+189
| | | | | | passing an allocator that compares different, we were not calling the destructor of the elements in the moved-from container. llvm-svn: 227359
* [libcxx] Make __wrap_iter work with gcc.Nico Weber2015-01-271-0/+20
| | | | | | | | | | | | | | | | | | | | | | | | | he following snippet doesn't build when using gcc and libc++: #include <string> void f(const std::string& s) { s.begin(); } #include <vector> void AppendTo(const std::vector<char>& v) { v.begin(); } The problem is that __wrap_iter has a private constructor. It lists vector<> and basic_string<> as friends, but gcc seems to ignore this for vector<> for some reason. Declaring vector before the friend declaration in __wrap_iter is enough to work around this problem, so do that. With this patch, I'm able to build chromium/android with libc++. Without it, two translation units fail to build. (iosfwd already provides a forward declaration of basic_string.) As far as I can tell, this is due to a gcc bug, which I filed as https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64816. Fixes PR22355. http://reviews.llvm.org/D7201 llvm-svn: 227226
* Added test for incomplete type support in vector/list/forward_list. ↵Marshall Clow2015-01-263-0/+6
| | | | | | References PR#17980 llvm-svn: 227131
* Fix PR21428. Buffer was one byte too small in octal formatting case. Add testMarshall Clow2015-01-261-0/+84
| | | | llvm-svn: 227097
* Fix PR#22284. Add a new overload to deque::insert to handle forward ↵Marshall Clow2015-01-221-1/+40
| | | | | | iterators. Update tests to exercise this case. llvm-svn: 226847
* Cleaning up the test suite; remove some includes of non-standard file <__config>Marshall Clow2015-01-1812-35/+8
| | | | llvm-svn: 226411
* Rename system_lib -> system_cxx_lib. NFCJonathan Roelofs2015-01-1428-57/+57
| | | | llvm-svn: 226061
* Make regex::assign not clobber the regex in case of failure. Fixes PR#22213Marshall Clow2015-01-131-0/+9
| | | | llvm-svn: 225799
* Fix vexing parse in test.Eric Fiselier2015-01-121-1/+1
| | | | llvm-svn: 225633
* One more #include request in the test suite from Walter BrownMarshall Clow2015-01-111-0/+1
| | | | llvm-svn: 225609
* Walter Brown sent a list of tests which needed 'additional includes' to ↵Marshall Clow2015-01-0969-0/+70
| | | | | | match what was in the standard. Added these includes to the tests. No changes to the library or test results. llvm-svn: 225541
* In early C++11 standard drafts, std::function derived from ↵Marshall Clow2015-01-081-29/+88
| | | | | | std::unary_function or std::binary_function if there was only one (or two) parameters. Before C++11 shipped, this restiction was lifted, but libc++ still does this (which is fine). However, the tests still check for this outdated requiremnt. Change then to check for the nested typedefs instead (which are still required by the standard). No change to the library. llvm-svn: 225430
* Add checks to make sure the hash functor has the right typedefsMarshall Clow2015-01-081-0/+4
| | | | llvm-svn: 225429
* Missed a typenameMarshall Clow2015-01-071-2/+2
| | | | llvm-svn: 225408
* libc++ implements its' hash objects as deriving from std::unary_function, ↵Marshall Clow2015-01-0711-24/+35
| | | | | | and the tests test for that. STL @ MS pointed out that the standard doesn't requie these objects to derive from unary_function, and so the tests should not require that either. Change the tests to check for the embedded typedefs - which ARE required. No change to the library. llvm-svn: 225403
* In C++03, a bunch of the arithmetic/logical/comparison functors (such as ↵Marshall Clow2015-01-074-4/+8
| | | | | | negate/bit_not.pass/logical_not) were defined as deriving from unary_funtion. That restriction was removed in C++11, but the tests still check for this. Change the test to look for the embedded types first_argument/second_argument/result_type. No change to the library, just more standards-compliant tests. Thanks to STL @ Microsoft for the suggestion. llvm-svn: 225402
* Add tests to check the typedefs from the result of std::owner_lessMarshall Clow2015-01-071-0/+8
| | | | llvm-svn: 225381
* Missed one comparison test in r225375Marshall Clow2015-01-071-1/+3
| | | | llvm-svn: 225376
* In C++03, a bunch of the arithmetic/logical/comparison functors (such as ↵Marshall Clow2015-01-0716-16/+48
| | | | | | add/equal_to/logical_or) were defined as deriving from binary_funtion. That restriction was removed in C++11, but the tests still check for this. Change the test to look for the embedded types first_argument/second_argument/result_type. No change to the library, just more standards-compliant tests. Thanks to STL @ Microsoft for the suggestion. llvm-svn: 225375
* Move a test to the new tests directory.Dan Albert2015-01-061-0/+43
| | | | | | | I had written the patch that added this test before the tests were moved into tests/std, so the test ended up in the wrong directory. llvm-svn: 225300
* Fix PR 22106; make std::swap work for multi-dimensional arrays. Thanks to ↵Marshall Clow2015-01-061-0/+49
| | | | | | Peter Griess for the report and suggested fix llvm-svn: 225285
OpenPOWER on IntegriCloud