summaryrefslogtreecommitdiffstats
path: root/libcxx
Commit message (Collapse)AuthorAgeFilesLines
* Make dtor_noexcept.pass.cpp tests more portable. Patch from STL@microsoft.comEric Fiselier2016-07-2514-18/+32
| | | | llvm-svn: 276595
* Don't SFINAE pair's copy assignment operator in C++03 mode.Eric Fiselier2016-07-252-0/+40
| | | | | | | | In C++03 mode evaluating the SFINAE can cause a hard error due to access control violations. This is a problem because the SFINAE is evaluated as soon as the class is instantiated, and not later. llvm-svn: 276594
* Mark bucket_count() assertions as non-portable. Patch from STL@microsoft.comEric Fiselier2016-07-25107-349/+458
| | | | llvm-svn: 276593
* Make move_assign_noexcept.pass.cpp tests more portable. Patch from ↵Eric Fiselier2016-07-2512-18/+30
| | | | | | STL@microsoft.com llvm-svn: 276591
* Make swap_noexcept.pass.cpp tests more portable. Patch from STL@microsoft.com.Eric Fiselier2016-07-2517-255/+148
| | | | | | See D21820 for more information (https://reviews.llvm.org/D21820). llvm-svn: 276590
* Work around MSVC's non-standard ABI for enums. Patch from STL@microsoft.comEric Fiselier2016-07-253-5/+22
| | | | llvm-svn: 276589
* Fix a non-standard allocator in vector tests. Patch from STL@microsoft.comEric Fiselier2016-07-241-0/+3
| | | | llvm-svn: 276588
* Fix unique_ptr.runtime tests for null inputs. Patch from STL@microsoft.comEric Fiselier2016-07-242-0/+13
| | | | llvm-svn: 276587
* Fix portability issues in <random> tests. Patch from STL@microsoft.comEric Fiselier2016-07-244-6/+19
| | | | llvm-svn: 276585
* Mark bucket() assertions as non-portable. Patch from STL@microsoft.comEric Fiselier2016-07-244-8/+12
| | | | llvm-svn: 276584
* Fix MSVC unreferenced parameter warning. Patch from STL@microsoft.comEric Fiselier2016-07-241-1/+1
| | | | llvm-svn: 276583
* Make move_noexcept.pass.cpp tests more portable. Patch from STL@microsoft.comEric Fiselier2016-07-2414-39/+53
| | | | llvm-svn: 276581
* Make bucket_count() greater-equal assertions portable. Patch from ↵Eric Fiselier2016-07-244-7/+7
| | | | | | STL@microsoft.com llvm-svn: 276580
* Mark bucket_size() assertions as non-portible. Patch from STL@microsoft.comEric Fiselier2016-07-244-48/+52
| | | | llvm-svn: 276578
* Guard libc++ specific tests SFINAE on std::bind's call operator. Patch from ↵Eric Fiselier2016-07-241-3/+5
| | | | | | STL@microsoft.com llvm-svn: 276576
* commit test missing from r276556Eric Fiselier2016-07-241-0/+27
| | | | llvm-svn: 276558
* Add __is_inplace_type metafunction helperEric Fiselier2016-07-241-0/+5
| | | | llvm-svn: 276556
* Start adding benchmarks for vectorEric Fiselier2016-07-242-1/+44
| | | | llvm-svn: 276552
* Skip chash computation in insert/emplace if the unconstrained hash matches.Eric Fiselier2016-07-244-1/+78
| | | | llvm-svn: 276549
* Make pair/tuples assignment operators SFINAE properly.Eric Fiselier2016-07-246-7/+312
| | | | llvm-svn: 276548
* Fix memory leak in test.Eric Fiselier2016-07-241-0/+4
| | | | llvm-svn: 276547
* Implement LWG 2393. Check for LValue-callability.Eric Fiselier2016-07-244-1/+66
| | | | llvm-svn: 276546
* Implement LWG2328. Rvalue stream extraction should perfect forward.Eric Fiselier2016-07-243-9/+18
| | | | llvm-svn: 276545
* Implement P0040r3: Extending memory management toolsEric Fiselier2016-07-2412-1/+1007
| | | | llvm-svn: 276544
* Implement the in_place tags from p0032r3.Eric Fiselier2016-07-232-0/+157
| | | | | | | That paper also has changes to any/optional but those will be implemented later. llvm-svn: 276537
* Fix undefined behavior in __hash_tableEric Fiselier2016-07-235-243/+234
| | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This patch attempts to fix the undefined behavior in __hash_table by changing the node pointer types used throughout. The pointer types are changed for raw pointers in the current ABI and for fancy pointers in ABI V2 (since the fancy pointer types may not be ABI compatible). The UB in `__hash_table` arises because tree downcasts the embedded end node and then deferences that pointer. Currently there are 2 node types in __hash_table: * `__hash_node_base` which contains the `__next_` pointer. * `__hash_node` which contains `__hash_` and `__value_`. Currently the bucket list, iterators, and `__next_` pointers store pointers to `__hash_node` even though they all need to store `__hash_node_base` pointers. This patch makes that change by introducing a `__next_pointer` typedef which is a pointer to `__hash_node` in the current ABI and `__hash_node_base` afterwards. One notable change is to the type of `__bucket_list` which used to be defined as `unique_ptr<__node_pointer[], ...>` and is now `unique_ptr<__next_pointer[], ...>` meaning that we now allocate and deallocate different types using a different allocator. I'm going to give this part of the change more thought since it may introduce compatibility issues. This change is similar to D20786. Reviewers: mclow.lists, EricWF Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D20787 llvm-svn: 276533
* Implement P0392r0. Integrate filesystem::path and string_view.Eric Fiselier2016-07-239-70/+211
| | | | llvm-svn: 276511
* Revert r276506 - Diagnose invalid memory order arguments in <atomic>.Eric Fiselier2016-07-232-203/+0
| | | | | | | | There is a bug in Clang 3.6 and earlier that causes compile failures. I suspect it's due to the usage of member function parameter names in the attributes. llvm-svn: 276507
* [libcxx] Diagnose invalid memory order arguments in <atomic>. Fixes PR21179.Eric Fiselier2016-07-232-0/+203
| | | | | | | | | | | | | | | Summary: This patch uses the __attribute__((enable_if)) hack suggested by @rsmith to diagnose invalid arguments when possible. In order to diagnose an invalid argument `m` to `f(m)` we provide an additional overload of `f` that is only enabled when `m` is invalid. When that function is enabled it uses __attribute__((unavailable)) to produce a diagnostic message. Reviewers: mclow.lists, rsmith, jfb, EricWF Subscribers: bcraig, jfb, rsmith, cfe-commits Differential Revision: https://reviews.llvm.org/D22557 llvm-svn: 276506
* Remove FIXME for feature test macroJF Bastien2016-07-211-1/+0
| | | | | | The value I'd picked was correct, as per the recently published SG10 paper http://wg21.link/p0096r3 llvm-svn: 276309
* Again, w/o the tabsMarshall Clow2016-07-211-5/+5
| | | | llvm-svn: 276273
* Another fix to appease the no-exception bots.Marshall Clow2016-07-211-7/+11
| | | | llvm-svn: 276272
* Fix some string_view tests that were failing when exceptions were disabled. ↵Marshall Clow2016-07-216-9/+34
| | | | | | Also comment out a _LIBCPP_ASSERT that gcc4.9 was complaining about. Will revisit that later. llvm-svn: 276241
* Implement std::string_view as described in http://wg21.link/P0254R1. ↵Marshall Clow2016-07-21100-722/+19163
| | | | | | Reviewed as https://reviews.llvm.org/D21459 llvm-svn: 276238
* Mark P0358r1 as complete. It is already implementedEric Fiselier2016-07-211-1/+1
| | | | llvm-svn: 276233
* Mark P0337r0 as complete. It was already implemented in std::experimentalEric Fiselier2016-07-211-1/+1
| | | | llvm-svn: 276231
* Implement P0084r2. Changing emplace return types.Eric Fiselier2016-07-2116-111/+142
| | | | llvm-svn: 276230
* Disable warning flags when running .fail.cpp tests.Eric Fiselier2016-07-203-26/+57
| | | | | | | | | Increasingly the .fail.cpp tests are written using -verify, making them sensitive to the exact diagnostics generated by the compiler. To prevent additional diagnostics from being generated, and causing the tests to fail, this patch removes the warning flags when compiling those tests. llvm-svn: 276208
* Unbreak traits tests by handling differences between version macros in ↵Eric Fiselier2016-07-203-2/+12
| | | | | | clang/apple-clang. llvm-svn: 276200
* Fix inheriting constructor test for std::function.Eric Fiselier2016-07-201-4/+7
| | | | | | | The test I originally checked in only worked with ToT Clang. This patch updates the test so that it works as far back as 3.5. llvm-svn: 276093
* Unbreak is_constructible tests for Clang <= 3.7.Eric Fiselier2016-07-202-1/+25
| | | | | | | There is a bug in Clang's __is_constructible builtin that causes it to return true for function types; ex [T = void()]. llvm-svn: 276092
* Add missed test in r276090.Eric Fiselier2016-07-201-0/+23
| | | | llvm-svn: 276091
* Move std::function constructor SFINAE into template parameter list. Fixes ↵Eric Fiselier2016-07-201-19/+10
| | | | | | | | | PR20002. Although inheriting constructors have already been fixed in Clang 3.9 I still choose to fix std::function so users can derive from it with older compilers. llvm-svn: 276090
* Reimplement is_constructible fallback implementation. Fixes PR21574.Eric Fiselier2016-07-203-99/+108
| | | | | | | The previous implementation relied highly on specializations to handle special cases. This new implementation lets the compiler do the work when possible. llvm-svn: 276084
* Add tests for reference binding assertions in std::tuple.Eric Fiselier2016-07-203-36/+124
| | | | | | | | | | | | Libc++ provides static assertions to detect reference binding issues inside tuple. This patch adds tests for those diagnostics. It should be noted that these static assertions technically violate the standard since it allows these illegal bindings to occur. Also see https://llvm.org/bugs/show_bug.cgi?id=20855 llvm-svn: 276078
* Add SFINAE on additional overloads of std::complex functions. Fixes PR19921.Eric Fiselier2016-07-203-146/+136
| | | | | | | | | | The functions arg, conj, imag, norm, proj, and real have additional overloads for arguments of integral or floating point types. However these overloads should not allow conversions to the integral/floating point types, only exact matches. This patch constrains these functions so they no longer allow conversions. llvm-svn: 276067
* Add heterogeneous comparator support for __debug_less. Fixes PR17147.Eric Fiselier2016-07-192-1/+182
| | | | llvm-svn: 276059
* [libcxx] Add support for benchmark tests using Google Benchmark.Eric Fiselier2016-07-1973-30/+9309
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This patch does the following: 1. Checks in a copy of the Google Benchmark library into the libc++ repo under `utils/google-benchmark`. 2. Teaches libc++ how to build Google Benchmark against both (A) in-tree libc++ and (B) the platforms native STL. 3. Allows performance benchmarks to be built as part of the libc++ build. Building the benchmarks (and Google Benchmark) is off by default. It must be enabled using the CMake option `-DLIBCXX_INCLUDE_BENCHMARKS=ON`. When this option is enabled the tests under `libcxx/benchmarks` can be built using the `libcxx-benchmarks` target. On Linux platforms where libstdc++ is the default STL the CMake option `-DLIBCXX_BUILD_BENCHMARKS_NATIVE_STDLIB=ON` can be used to build each benchmark test against libstdc++ as well. This is useful for comparing performance between standard libraries. Support for benchmarks is currently very minimal. They must be manually run by the user and there is no mechanism for detecting performance regressions. Known Issues: * `-DLIBCXX_INCLUDE_BENCHMARKS=ON` is only supported for Clang, and not GCC, since the `-stdlib=libc++` option is needed to build Google Benchmark. Reviewers: danalbert, dberlin, chandlerc, mclow.lists, jroelofs Subscribers: chandlerc, dberlin, tberghammer, danalbert, srhines, hfinkel Differential Revision: https://reviews.llvm.org/D22240 llvm-svn: 276049
* Fix undefined behavior in __treeEric Fiselier2016-07-198-188/+302
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This patch attempts to fix the undefined behavior in __tree by changing the node pointer types used throughout. The pointer types are changed for raw pointers in the current ABI and for fancy pointers in ABI V2 (since the fancy pointer types may not be ABI compatible). The UB in `__tree` arises because tree downcasts the embedded end node and then deferences that pointer. Currently there are 3 node types in __tree. * `__tree_end_node` which contains the `__left_` pointer. This node is embedded within the container. * `__tree_node_base` which contains `__right_`, `__parent_` and `__is_black`. This node is used throughout the tree rebalancing algorithms. * `__tree_node` which contains `__value_`. Currently `__tree` stores the start of the tree, `__begin_node_`, as a pointer to a `__tree_node`. Additionally the iterators store their position as a pointer to a `__tree_node`. In both of these cases the pointee can be the end node. This is fixed by changing them to store `__tree_end_node` pointers instead. To make this change I introduced an `__iter_pointer` typedef which is defined to be a pointer to either `__tree_end_node` in the new ABI or `__tree_node` in the current one. Both `__tree::__begin_node_` and iterator pointers are now stored as `__iter_pointers`. The other situation where `__tree_end_node` is stored as the wrong type is in `__tree_node_base::__parent_`. Currently `__left_`, `__right_`, and `__parent_` are all `__tree_node_base` pointers. Since the end node will only be stored in `__parent_` the fix is to change `__parent_` to be a pointer to `__tree_end_node`. To make this change I introduced a `__parent_pointer` typedef which is defined to be a pointer to either `__tree_end_node` in the new ABI or `__tree_node_base` in the current one. Note that in the new ABI `__iter_pointer` and `__parent_pointer` are the same type (but not in the old one). The confusion between these two types is unfortunate but it was the best solution I could come up with that maintains the ABI. The typedef changes force a ton of explicit type casts to correct pointer types and to make current code compatible with both the old and new pointer typedefs. This is the bulk of the change and it's really messy. Unfortunately I don't know how to avoid it. Please let me know what you think. Reviewers: howard.hinnant, mclow.lists Subscribers: howard.hinnant, bbannier, cfe-commits Differential Revision: https://reviews.llvm.org/D20786 llvm-svn: 276003
* Bump version # to 4.0.0Marshall Clow2016-07-181-1/+1
| | | | llvm-svn: 275904
OpenPOWER on IntegriCloud