Commit Graph

2070 Commits

Author SHA1 Message Date
Eric Fiselier
1d801988a7 Add missing stdbool.h module. The test suite now passes on OS X with modules
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288787 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 09:41:50 +00:00
Eric Fiselier
7a6fabad1c Fix stdio module build on OS X
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288778 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 07:40:46 +00:00
Eric Fiselier
74c9d6aa0d Fix C++03 modules build
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288755 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:34:24 +00:00
Eric Fiselier
7ba695e32c Add module definitions for <experimental/foo> headers
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288735 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-05 23:55:34 +00:00
Eric Fiselier
72a5c771b8 Add module definitions for string_view
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288733 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-05 23:53:23 +00:00
Eric Fiselier
045b27e848 Add modules for any/optional/variant
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288730 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-05 23:33:19 +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
Shoaib Meenai
c6d8e8a9cc [libc++] Add _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS
It's useful to be able to disable visibility annotations entirely; for
example, if we're building libc++ static to include in another library,
and we don't want any libc++ functions getting exported out of that
library. This is a generalization of _LIBCPP_DISABLE_DLL_IMPORT_EXPORT.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288690 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-05 19:40:12 +00:00
Eric Fiselier
0c2ffb6670 Choose better hash values for std::monostate and valueless variants.
Previously these hashes were 0 and -1 respectively. These seem like common
sentinel values and should be avoided to prevent needless collisions.

This patch changes those values to different arbitrary numbers, which should
hopefully cause less collisions. Because I couldn't help myself I choose the
fundamental constants for gravity and the speed of light.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288623 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-04 21:37:37 +00:00
Eric Fiselier
81b7f63174 Make make_exception_ptr abort with -fno-exceptions
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288575 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-03 03:22:11 +00:00
Eric Fiselier
5b0fa443aa Fix <variant> w/o exception support
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288571 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-03 01:58:07 +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
a2ff798745 Fix C++03 build
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288555 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-02 23:41:18 +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
4975ccc637 Fix generated warnings in <variant>
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288552 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-02 23:17:33 +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
Aditya Kumar
4299795816 [libcxx] remove unused code
The macro _LIBCPP_UNROLL_LOOPS isn't used anywhere
so the code was dead.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288143 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-29 14:43:42 +00:00
Marshall Clow
afa9b590b2 Implement conjuntion/disjuntion/negation for LFTS v2. Same code and tests for the ones in std::
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287988 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-26 18:45:03 +00:00
Marshall Clow
70e6a8d552 Implement the 'detection idiom' from LFTS v2
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287981 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-26 15:49:40 +00:00
Eric Fiselier
e041941007 Fix __hash_table::max_size() on 32 bit systems
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287749 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-23 09:16:12 +00:00
Eric Fiselier
ef3060ef96 [libcxx] Fix max_size() across all containers
Summary: The `max_size()` method of containers should respect both the allocator's reported `max_size` and the range of the `difference_type`. This patch makes all containers choose the smallest of those two values.

Reviewers: mclow.lists, EricWF

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287729 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-23 01:18:56 +00:00
Eric Fiselier
fb6164cdad Allow libc++ to use modules in C++03.
Libc++ internal uses <atomic> in C++03 code but the module map forbids its use.
This causes the libc++ 'std' module to fail to build in C++03.

This patch removes the requirement to fix this issue.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287693 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-22 20:15:39 +00:00
Eric Fiselier
6010dc84c6 Attempt to fix stdint/cstdint modules try 2
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287690 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-22 20:05:19 +00:00
Eric Fiselier
faa8312d51 Cleanup module.modulemap
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287687 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-22 20:00:21 +00:00
Eric Fiselier
8b4cb5ba98 Revert r287435 because of OS X test failures
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287531 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-21 11:26:10 +00:00
Eric Fiselier
6f7f0b8530 Fix stdint/cstdint modules
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287435 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-19 03:29:03 +00:00
Eric Fiselier
850745db9e [libcxx] Implement locale.h to fix modules build
Summary:
Because `locale.h` isn't part of the libc++ modules the class definitions it provides are exported as part of `__locale` (since it happens to be build first). This breaks `<clocale>` which exports `std::lconv` without including `<__locale>`.

This patch implements `locale.h` to fix this issue, it also adds support for testing libc++ with modules.




Reviewers: mclow.lists, rsmith, EricWF

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287413 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-19 01:14:15 +00:00
Eric Fiselier
8c57032b52 Remove _LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS
libc++ no longer supports C++11 compilers that don't implement `= default`.
This patch removes all instances of the feature test macro
_LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS as well as the potentially dead code it hides.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287321 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-18 06:42:17 +00:00
Shoaib Meenai
f66194bce3 [libc++] Fix preprocessor guard for overload declaration
Fix a typo in the conditional.  Caught by going through list of removed
symbols when building with hidden visibility.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287309 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-18 04:31:09 +00:00
Eric Fiselier
a93ebeca94 Workaround compilers w/o C++1z inline variables
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287255 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-17 20:08:43 +00:00
Eric Fiselier
8d33526db2 Implement P0504R0: Revisiting in-place tag types for any/optional/variant
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287250 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-17 19:24:04 +00:00
Shoaib Meenai
e6479bc783 [libc++] Introduce _LIBCPP_OVERRIDABLE_FUNC_VIS
This is a generalization of `_LIBCPP_NEW_DELETE_VIS`; the new macro name
captures the semantics better, and also allows us to get rid of the
`_WIN32` check in `include/new`. No functional change.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287164 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-16 22:18:10 +00:00
Eric Fiselier
18e2c824b4 Fix non-reserved name usage
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287080 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-16 04:45:32 +00:00
Justin Lebar
bb835ac64d [CUDA] Mark __libcpp_{isnan,isinf,isfinite} as constexpr.
Summary:
This makes these functions available on host and device, which is
necessary to compile <complex> for the device.

Reviewers: hfinkel, EricWF

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287012 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-15 19:15:57 +00:00
Marshall Clow
3d7c49b7b0 Implement P0516: 'Clarify That shared_future’s Copy Operations have Wide Contracts' which was adopted last week in Issaquah
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@286877 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-14 19:58:05 +00:00
Marshall Clow
5ec20dfb48 Implement P0510 'Make future_error Constructible' adopted in Issaquah
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@286864 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-14 18:56:24 +00:00
Marshall Clow
db7fa111ab Fixes for LWG 2598, 2686, 2739, 2742, 2747, and 2759, which were adopted last week in Issaquah
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@286858 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-14 18:22:19 +00:00
Eric Fiselier
5e000c6a82 Add check-cxx-abilist target when supported.
This patch adds a `check-cxx-abilist` target which verifies the libc++.so ABI
when the current build configuration matches the configuration used to generate
the ABI lists.

In order to make this change `HandleOutOfTreeLLVM.cmake` needed to be modified
to include `LLVMConfig.cmake` so that `TARGET_TRIPLE` is defined. Hopefully
the changes needed to accommodate this won't break existing build
configurations.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@286789 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-14 02:43:12 +00:00
Eric Fiselier
f9a20c2c38 Implement LWG 2770 - Make tuple_size<T> defined for all T
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@286779 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-13 20:43:50 +00:00
Eric Fiselier
fc044a1ff2 Fix PR30979 - tuple<move_only> is constructible from move_only const&
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@286774 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-13 19:54:31 +00:00
Shoaib Meenai
a43c2e769a [libc++] Remove unnecessary MSVCRT exclusions
Visual Studio 2013 and up have these functions, and we don't need to
support older versions.

There are some remaining _LIBCPP_MSVCRT exclusions which are present on
Visual Studio 2015 but not 2013. Those will be addressed in a follow-up.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@286202 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-08 03:31:42 +00:00
Marshall Clow
f333beee2c Implement another part of P0031; adding constexpr to move_iterator
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@285818 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-02 15:30:26 +00:00
Eric Fiselier
863388e8d8 Fix GCC test failure caused by manually defining _LIBCPP_HAS_NO_VARIADICS
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@285788 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-02 05:08:58 +00:00
Eric Fiselier
2c6c2b944e Fix __libcpp_is_constructible for source types with explicit conversion operators.
Previously __libcpp_is_constructible checked the validity of reference
construction using 'eat<To>(declval<From>())' but this doesn't consider
From's explicit conversion operators. This patch teaches __libcpp_is_constructible
how to handle these cases. To do this we need to check the validity
using 'static_cast<To>(declval<From>())'. Unfortunately static_cast allows
additional base-to-derived and lvalue-to-rvalue conversions, which have to be
checked for and manually rejected.

While implementing these changes I discovered that Clang incorrectly
rejects `static_cast<int&&>(declval<float&>())` even though
`int &&X(declval<float&>())` is well formed. In order to tolerate this bug
the `__eat<T>(...)` needs to be left in-place. Otherwise it could be replaced
entirely with the new static_cast implementation.

Thanks to Walter Brown for providing the test cases.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@285786 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-02 03:57:34 +00:00
Shoaib Meenai
3b2cf9659d [libc++] Add configuration define for off_t functions
Create this define in __config and use it elsewhere, instead of checking
the operating system/library defines in other files. The aim is to
reduce the usage of _WIN32 outside __config. No functional change.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@285582 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-31 15:09:10 +00:00
Eric Fiselier
51eb1d577a Add 'inline' but not 'always_inline' to std::strings destructor.
Adding both 'inline' and 'always_inline' to the destructor has been contentious.
However most of the performance benefits can be gained by only adding 'inline',
and there is no reason to hold up that change while discussing the other.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@285538 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-31 03:42:50 +00:00
Eric Fiselier
d5b0db5249 Remove additional function template definitions from the dylib
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@285537 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-31 03:40:29 +00:00
Eric Fiselier
026d38e8fb Optimize filesystem::path by providing weaker exception guarantees.
path uses string::append to construct, append, and concatenate paths. Unfortunatly
string::append has a strong exception safety guaranteed and if it can't prove
that the iterator operations don't throw then it will allocate a temporary
string copy to append to. However this extra allocation and copy is very
undesirable for path which doesn't have the same exception guarantees.

To work around this this patch adds string::__append_forward_unsafe which exposes
the std::string::append interface for forward iterators without enforcing
that the iterator is noexcept.



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@285532 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-31 02:46:25 +00:00
Eric Fiselier
eb6b13f578 Fix _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY to always have default visibility.
This prevent the symbols from being both externally available and hidden, which
causes them to be linked incorrectly. This is only a problem when the address
of the function is explicitly taken since it will always be inlined otherwise.

This patch fixes the issues that caused r285456 to be reverted, and can
now be reapplied.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@285531 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-31 02:07:23 +00:00
Eric Fiselier
ad1a12c312 Improve performance of constructing filesystem::path from strings.
This patch fixes a performance bug when constructing or appending to a path
from a string or c-string. Previously we called 'push_back' to append every
single character. This caused multiple re-allocation and copies when at most
one reallocation is necessary. The new behavior is to simply call
`string::append` so it can correctly handle reallocation.

For large strings this change is a ~4x improvement. This also makes our path
faster to construct than libstdc++'s.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@285530 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-30 23:53:50 +00:00