Commit Graph

217 Commits

Author SHA1 Message Date
Eric Fiselier 237b6ed9e4 [libcxx] Unify LIBCXX_<ABI-Name>_INCLUDE_PATHS to be LIBCXX_CXX_ABI_INCLUDE_PATHS
Summary:
Clean up all the different possible CMake options for specifying the ABI include paths into one CMake option named `LIBCXX_CXX_ABI_INCLUDE_PATHS`. 
The documentation has been updated to reflect this change.

For the next week I have added explicit errors if any of the old flags is used. These errors inform users of the change and the new option to use.

Before committing the change I will announce this change on cfe-dev.

Reviewers: danalbert, mclow.lists

Reviewed By: danalbert, mclow.lists

Subscribers: jroelofs, cbergstrom, cfe-commits

Differential Revision: http://reviews.llvm.org/D5039

llvm-svn: 232762
2015-03-19 20:59:45 +00:00
Eric Fiselier ea10d2477a [libcxx] Add <experimental/tuple> header for LFTS.
Summary:
This patch adds the `<experimental/tuple>` header (almost) as specified in the latest draft of the library fundamentals TS.

The main changes in this patch are:

1. Added variable template `tuple_size_v`
2. Added function `apply(Func &&, Tuple &&)`.
3. Changed `__invoke` to be `_LIBCPP_CONSTEXPR_AFTER_CXX11`.

The `apply(...)` implementation uses `__invoke` to invoke the given function. `__invoke` already provides the required functionality. Using `__invoke` also allows `apply` to be used on pointers to member function/objects as an extension. In order to facilitate this `__invoke` has to be marked `constexpr`. 



Test Plan:
Each new feature was tested. 

The test cases for `tuple_size_v` are as follows:
1. tuple_size_v.pass.cpp
  - Check `tuple_size_v` on cv qualified tuples, pairs and arrays.
2. tuple_size_v.fail.cpp
  - Test on reference type.
3. tuple_size_v_2.fail.cpp
  - Test on non-tuple
4. tuple_size_v_3.fail.cpp
  - Test on pointer type.

The test cases for tuple.apply are as follows:

1. arg_type.pass.cpp
   - Ensure that ref/pointer/cv qualified types are properly passed.
2. constexpr_types.pass.cpp
   - Ensure constexpr evaluation of apply is possible for `tuple` and `pair`.
3. extended_types.pass.cpp
   - Test apply on function types permitted by extension.
4. large_arity.pass.cpp
   - Test that apply can evaluated on tuples and arrays with large sizes.
5. ref_qualifiers.pass.cpp
   - Test that apply respects ref qualified functions.
6. return_type.pass.cpp
   - Test that apply returns the proper type.
7. types.pass.cpp
   - Test apply on function types as required by LFTS.

Reviewers: mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D4512

llvm-svn: 232515
2015-03-17 18:28:14 +00:00
Eric Fiselier da52c55fc3 [libcxx] Tired of colorless compile errors? Enable color diagnostics today!
Summary:
This patch adds a lit option to enable color diagnostics when either `--param=color_diagnostics` is passed to LIT or `LIBCXX_COLOR_DIAGNOSTICS` is present in the environment.

My only concern with this patch is that GCC and Clang take different flags and that only GCC 4.9 and greater support `-fdiagnostics-color=always`

Does anybody have objections to this going in?

Reviewers: jroelofs, danalbert

Reviewed By: danalbert

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D7729

llvm-svn: 229707
2015-02-18 17:39:45 +00:00
Eric Fiselier 938d957d2e Enable testing with _LIBCPP_DEBUG and fix bad assertions in string_view.
llvm-svn: 229698
2015-02-18 17:00:31 +00:00
Eric Fiselier 0285fc869d Mark <experimental/system_error> as complete
llvm-svn: 227974
2015-02-03 16:04:45 +00:00
Eric Fiselier a261064483 Update LFTS status page
llvm-svn: 227862
2015-02-02 21:10:21 +00:00
Dan Albert 2477bed098 Update web page to direct patches to Phabricator.
llvm-svn: 227629
2015-01-30 22:33:41 +00:00
Eric Fiselier 74e82fa4f3 [libcxx] Allow use of ShTest in libc++ tests along with other changes.
Summary:
This patch allows the use of LIT's ShTest format in the libc++ test suite. ShTests have the suffix '.sh.cpp'. It also introduces a series of other changes. These changes are:

- More functionality including parsing test metadata has been moved into LIT.
- LibcxxTestFormat now supports multi-part suffixes.
- the `CXXCompiler` functionality has been used to shrink the size of LibcxxTestFormat. 
- The recursive loading of the site config has been turned into `libcxx.test.config.loadSiteConfig` so it can be used with libc++abi.
- Temporary files are now created in the build directory of libc++. This follows how it is down in ShTest.
- `not.py` was added as a utility executable that mirrors the functionality of LLVM's `not` executable. 
- The first ShTest test was added under test/libcxx/double_include.sh.cpp


Reviewers: jroelofs, danalbert

Reviewed By: danalbert

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D7073

llvm-svn: 226844
2015-01-22 18:05:58 +00:00
Eric Fiselier a745465ae4 Add 'no_default_flags' option for turning off all default test compile and link flags.
When 'no_default_flags' is true only flags passed using '--param=compile_flags'
and '--param=link_flags' will be used when compiling the tests. This option
can be used to run the test suite against libstdc++ and helps with all
unusual test suite configurations.

NOTE: sanitizer flags are still added when '--param=use_sanitizer' is used even
if '--param=no_default_flags' is given.

llvm-svn: 226322
2015-01-16 21:22:08 +00:00
Eric Fiselier 19c07165d1 [libcxx] Add numerous options to libc++ LIT test suite configuration.
Summary:
In order to fully replace the testit script we need to update LIT so it provides the same functionality.
This patch adds a number of different configuration options to LIT to do that. It also adds documentation for all of the command line parameters that LIT supports.

Generic options added:
- `libcxx_headers`
- `libcxx_library`
- `compile_flags`


Generic options modified:
- `link_flags`: Changed from overriding the default args to adding extra args instead (to match compile flags)
- `use_sanitizer`: Renamed from `llvm_use_sanitizer`


Please see the added documentation for more information about the switches. As for the actual documentation I'm not sure if it should be kept in libc++ forever since it adds an undue maintenance burden, but I think it should be added for the time being while the changes are new. I'm verify unskilled with HTML so if the documentation needs any changes please let me know.

Hopefully this will kill testit.



Reviewers: jroelofs, mclow.lists, danalbert

Reviewed By: danalbert

Subscribers: alexfh, cfe-commits

Differential Revision: http://reviews.llvm.org/D5877

llvm-svn: 224728
2014-12-22 20:49:45 +00:00
Eric Fiselier a78a26783e [libcxx] Teach libcxx's lit configuration new ways to find lit.site.cfg
Summary:
Currently to run tests in tree you need to symlink the lit.site.cfg file generated by the cmake build into the source tree, and teach your VCS to ignore it.

This allows the user to specify where to find the lit.site.cfg file two different ways:
* lit_site_config lit parameter
* LIT_SITE_CONFIG enviroment variable. 

example usage:
```
lit -sv --param=libcxx_site_config=path/to/libcxx-build/test/lit.site.cfg path/to/tests
```
Or
```
export LIBCXX_SITE_CONFIG=path/to/libcxx-build/test/lit.site.cfg
lit -sv path/to/tests
```
The command line parameter will override the environment variable. 
If neither options are present a warning is issued and the `lit.cfg` file is loaded directly. 


Reviewers: mclow.lists, jroelofs, danalbert

Reviewed By: danalbert

Subscribers: ddunbar, cfe-commits

Differential Revision: http://reviews.llvm.org/D6255

llvm-svn: 224671
2014-12-20 03:16:55 +00:00
Marshall Clow b04058e8c1 Implement LWG 2217 - operator==(sub_match, string) slices on embedded '\0's
llvm-svn: 224292
2014-12-15 23:57:56 +00:00
Eric Fiselier f60e441080 Update information on where to find buildbots. Remove dead buildbot links.
llvm-svn: 223848
2014-12-09 22:53:21 +00:00
Marshall Clow ad75510453 Implement N4280 - 'Non-member size() and more'
llvm-svn: 222378
2014-11-19 19:43:23 +00:00
Marshall Clow e8584ca3ad Added entries for bugs 2118 and 2306, which were closed in Urbana
llvm-svn: 222361
2014-11-19 15:59:16 +00:00
Marshall Clow 90ba6230a3 Marked LWG 2399 as complete. I committed a test for this earlier today.
llvm-svn: 222251
2014-11-18 20:37:47 +00:00
Marshall Clow f127a2d77f Update status of LWG issues 2340, 2396 and 2401. In all three cases, these are things that we already do.
llvm-svn: 222240
2014-11-18 17:35:16 +00:00
Marshall Clow 278ddec22c Implement LWG2400 - 'shared_ptr's get_deleter() should use addressof()', and add tests. Mark LWG2400 and LWG2404 as complete
llvm-svn: 222161
2014-11-17 19:05:50 +00:00
Marshall Clow 3687d3c2e9 Implement void_t from N3911. Add a private version for use in the library before C++1z. Update the 1z status page, marking a bunch of issues that don't require library changes as complete (2129, 2212, 2230, 2233, 2325, 2365, 2376)
llvm-svn: 222138
2014-11-17 15:50:08 +00:00
Marshall Clow f1ce9c177f Fixed a typo in a paper name: 4190 --> N4190
llvm-svn: 221690
2014-11-11 16:45:50 +00:00
Marshall Clow 68640684e8 Update status pages for C++1z
llvm-svn: 221601
2014-11-10 15:43:20 +00:00
Eric Fiselier d5a55037e1 Remove dead buildbot link
llvm-svn: 220260
2014-10-21 02:46:31 +00:00
Eric Fiselier a63c149ceb [libcxx] Redo adding support for building and testing with an ABI library not along linker paths
Summary:
This is the second attempt at allowing for the use of libraries that the linker cannot find. The first attempt used `CMAKE_LIBRARY_PATH` and `find_library` to select which ABI library should be used. There were a number of problems with this approach:

- `find_library` didn't work with cmake targets (ie in-tree libcxxabi build)
- It wasn't always possible to determine where `find_library` actually found your library.
- `target_link_libraries` inserted the path of the ABI library into libc++'s RPATH when `find_library` was used.
- Linking libc++ and it's ABI library is a special case. It's a lot easier to keep it simple. 

After discussion with @cbergstrum a new approach was decided upon.
This patch achieve the same ends by simply using `LIBCXX_CXX_ABI_LIBRARY_PATH` to specify where to find the library (if the linker won't find it). When this variable is defined it is simply added as a library search path when linking libc++. It is a lot easier to duplicate this behavior in LIT. It also prevents libc++ from being linked with an RPATH.






Reviewers: mclow.lists, cbergstrom, chandlerc, danalbert

Reviewed By: chandlerc, danalbert

Subscribers: chandlerc, cfe-commits

Differential Revision: http://reviews.llvm.org/D5860

llvm-svn: 220157
2014-10-19 00:42:41 +00:00
Eric Fiselier 6f9da55c0f [libcxx] Add support for building and testing with an ABI library not along linker paths
Summary:
This patch adds support for building/testing libc++ with an ABI library that the linker would not normally find.

- `CMAKE_LIBRARY_PATH` is used to specify the list of search directories.
- The ABI library is now found using `find_library` instead of assuming its along the linker's search path.
- `CMAKE_LIBRARY_PATH` is passed to our LIT config as `library_paths`.
- For each path in `library_paths` the following flags are added `-L<path> -Wl,-rpath -Wl,<path>`

Some changes in existing behavior were also added:
- `target_link_libraries` is now passed the ABI library file instead of the library name. Ex `target_link_libraries(cxx "/usr/lib/libc++abi.so")` vs `target_link_libraries(cxx "c++abi")`.
- `-Wl,-rpath -Wl,<path>` is now used on OSX to link to libc++ instead of env['DYLD_LIBRARY_PATH'] if `use_system_lib=False`.




Reviewers: mclow.lists, danalbert, EricWF

Reviewed By: EricWF

Subscribers: emaste, cfe-commits

Differential Revision: http://reviews.llvm.org/D5038

llvm-svn: 220118
2014-10-18 01:15:17 +00:00
Eric Fiselier ce842e8c4a Fix bad link in documentation. Thanks to rsmith
llvm-svn: 219898
2014-10-16 03:15:31 +00:00
Eric Fiselier 8c5bc1cb5f Add my buildbot to list of libc++ buildbots in documentation
llvm-svn: 219894
2014-10-16 02:48:59 +00:00
Eric Fiselier 8f2a62ed6b Update linux test results
llvm-svn: 215884
2014-08-18 06:53:30 +00:00
Eric Fiselier cd6ac3a3a7 [libcxx] Add list of currently known buildbots to libc++ homepage
Summary:
Instead of having to update test results for different platforms it would be helpful to just supply links to buildbots that build+test libcxx.
For the FreeBSD bots Pawel Worach gave me the OK to link to them.

Reviewers: mclow.lists, danalbert

Reviewed By: danalbert

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D4947

llvm-svn: 215882
2014-08-18 05:25:04 +00:00
Dan Albert ec4de787e2 Update libc++ docs to include instructions for LIT.
Okay, so this actually does more than just that. I've rearranged most of
the information on the page to try to make it more helpful and flow
better.  Essentially, the differences between Mac and Linux, the various
ABI libraries, and in-tree versus out-of-tree builds were cluttering
things. To clean up, I've done the following:

 * Only describe the cmake process. buildit doesn't work out of the box
   on Linux, and we need to stop having duplicates for every process.
 * Use libc++abi for the default instructions. This works on the major
   platforms.
 * Describe both in-tree and out-of-tree builds. Previously it wasn't
   clear that in-tree builds were even possible for libc++.
 * Separate the documentation about using libc++ from that about
   building and testing libc++.

llvm-svn: 215358
2014-08-11 15:12:46 +00:00
Eric Fiselier 58fab766e6 Adding ABI information to linux test results
llvm-svn: 214484
2014-08-01 06:30:18 +00:00
Eric Fiselier ae9acb8273 Update information about compiler used during linux tests and reformat run information.
llvm-svn: 214483
2014-08-01 06:27:40 +00:00
Eric Fiselier 9cd8ed4e23 Update linux test results file
llvm-svn: 214474
2014-08-01 01:59:09 +00:00
Eric Fiselier 531d8b2bc4 [libcxx] Add <experimental/utility> header for LFTS.
Summary:
This patch adds the `<experimental/utility>` header as specified in the latest draft of the library fundamentals TS.

`<experimental/utility>` only contains `class erased_type`. 

This patch also updates the documentation to list the `erased_type` class as "initial implementation complete".

Test Plan:
Three test cases where added:

1. Test that `_LIBCPP_VERSION` is defined.
2. Test that `<utility>` has been included.
3. Test that `erased_type` is in the correct namespace and is constexpr default constructible.

Reviewers: mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D4510

llvm-svn: 213226
2014-07-17 05:31:31 +00:00
Marshall Clow cd68ae3f10 Fixed damaged row in issues table; thanks to STL for the catch
llvm-svn: 210500
2014-06-09 23:27:27 +00:00
Marshall Clow 425f00817c Add a note about debug mode being non-functional
llvm-svn: 210162
2014-06-04 04:49:49 +00:00
Marshall Clow f39d914d33 First cut at a post c++14 status page
llvm-svn: 210056
2014-06-02 23:37:13 +00:00
Marshall Clow 5cf03ab4b7 Removed 'sized deallocation' from C++14 status page since it turned out to require no library work, and fixed a typo in index.html. Thanks to Tobias for pointing these out.
llvm-svn: 205700
2014-04-07 07:28:33 +00:00
Marshall Clow 17c6aa0f53 Add a section about reporting bugs and contributing patches
llvm-svn: 205507
2014-04-03 03:13:12 +00:00
Marshall Clow 079402d1c1 Reword C++14 status to match C++11 status
llvm-svn: 205505
2014-04-03 02:38:12 +00:00
Marshall Clow ca6e366d07 Mark C++14 status as 'complete'
llvm-svn: 205504
2014-04-03 02:35:29 +00:00
Marshall Clow 1641a7c1cb Implement LWG issue #2135. If something goes wrong in condition_variable::wait, call terminate() rather than throwing an error. Do this indirectly, by marking the call as 'noexcept'. This is better than just calling terminate() directly, because it gives a better error message on the console.
llvm-svn: 204778
2014-03-26 02:45:04 +00:00
Marshall Clow b43399842f Mark LWG issues #2075 and #2142 as complete. 2142 was a change to the standard
to remove redundant wording, which required no changes to libc++. 2075 was a 
rewrite of the requirements for forward progress, and again, requires no changes
to the library.

llvm-svn: 204724
2014-03-25 14:57:05 +00:00
Marshall Clow 4fdb070817 Add a test to make sure we're doing the right thing for throwing exceptions from deferred functions. This is LWG issue #2186. No change to the library needed.
llvm-svn: 204678
2014-03-24 22:25:24 +00:00
Marshall Clow e2db85a968 Mark LWG Issue #2288 as complete. This was wording cleanup, no code changes required.
Also mark #2104 as complete. Leave the implementation in libc++ as noexcept, since 
implementations are allowed to add noexcept to non-virtual calls. If we throw from
unique_lock& operator=(unique_lock&& u), then that means the preconditions were violated,
and calling terminate() (as a result of throwing from a noexcept function) is as
good example of undefined behavior as any other.

llvm-svn: 204653
2014-03-24 18:38:01 +00:00
David Majnemer 7ec93f9b1c Implement N3891: A proposal to rename shared_mutex to shared_timed_mutex
This is as straightforward as it sounds, a renamed from shared_mutex to
shared_timed_mutex.

Note that libcxx .dylib and .so files built with c++14 support need to
be rebuilt.

llvm-svn: 204078
2014-03-17 20:19:44 +00:00
Marshall Clow 98de59157c Remove Issue #2235 from the Chicago section. The resolution was approved in Bristol (and it is listed there), and then is was approved *again* in Chicago. Thanks to STL @ microsoft for the catch
llvm-svn: 203995
2014-03-15 01:55:31 +00:00
Marshall Clow ef3d680093 Implement LWG 2360: 'reverse_iterator::operator*() is unimplementable'. Note that this is a (small) behavior change in the library. Reverse iterators whose base iterators' operator* return references to 'within themselves' have been sacrificed to the greater goal of avoiding data races.
llvm-svn: 203587
2014-03-11 17:16:17 +00:00
Marshall Clow ed94639ea1 Mark LWG #2314. 'apply() should return decltype(auto) and use decay_t before tuple_size' as complete. This is a correction to some example code in the standard, no change needed for libc++.
llvm-svn: 203579
2014-03-11 15:17:34 +00:00
Marshall Clow b33d838bcf Final bit for LWG #2263; test different allocator pointer types. Note that libc++ already does the right thing here; I've just added tests to ensure that it stays this way.
llvm-svn: 203539
2014-03-11 04:32:12 +00:00
Marshall Clow 17af2f56ab Add tests for LWG issue #2356. Stability of erasure in unordered associative containers. Libc++ already does this, but now we have tests for it.
llvm-svn: 203494
2014-03-10 21:36:36 +00:00