Commit Graph

1893 Commits

Author SHA1 Message Date
Eric Fiselier
f620d224b7 Work around python3 bytes vs str in libc++ test config
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292038 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-15 00:06:02 +00:00
Eric Fiselier
5cd8a36772 XFAIL native handle tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292029 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 20:25:25 +00:00
Eric Fiselier
5fd0d08f72 Fix demangle.h on Windows
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292028 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 20:21:18 +00:00
Jonas Hahnfeld
29d52a28e4 Fix last_write_time tests for filesystems that don't support negative and very large times
Seems to be the case for NFS.

Original patch by Eric Fiselier!
Differential Revision: https://reviews.llvm.org/D22452

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292013 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 11:35:15 +00:00
Eric Fiselier
06192cb774 Mark test as UNSUPPORTED on Windows since it hangs forever
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292012 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 10:31:43 +00:00
Eric Fiselier
30d12e372a Fix Windows try_lock implementation
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292011 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 10:27:12 +00:00
Eric Fiselier
157fd34124 [libc++][CMake] Use debug MSVC runtimes when libc++ is built in debug mode
Summary: This patch allows libc++ to be built against the debug MSVC runtimes instead of just the release ones.

Reviewers: rnk, majnemer, compnerd, smeenai

Subscribers: mgorny, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292006 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 07:54:39 +00:00
Eric Fiselier
fdd3c91b5f [libc++] [CMake] Link with /nodefaultlibs on Windows
Summary:
This patch attempts to fix the libc++ build/link so that it doesn't use an default C++ libraries on Windows.  This is needed to prevent linking to MSVC's STL library.

Additionally this patch changes libc++ so that it is always linked with the non-debug DLL's (e.g. `/MD`). This is needed so that the test suite can correctly link the same libraries without needing to know which configuration `c++.dll` was linked with.


Reviewers: compnerd, rnk, majnemer, kimgr, awson, halyavin, smeenai

Subscribers: cfe-commits, mgorny

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292001 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 06:06:47 +00:00
Eric Fiselier
50ca3248fb Use __is_identifier to detect Clang extensions instead of __has_extension.
When -pedantic-errors is specified `__has_extension(<feature>)` is always
false when it would otherwise be true. This causes C++03 <atomic> to break
along with other issues.

This patch avoids the above problem by using __is_identifier(...) instead since
it is not affected by -pedantic-errors. For example instead of checking for
__has_extension(c_atomics) we now check `!__is_identifier(_Atomic)`, which
is only true when _Atomic is not a keyword provided by the compiler.

This patch applies similar changes to the detection logic for __decltype and
__nullptr as well.

Note that it does not apply this change to the C++03
`static_assert` macro since -Wc11-extensions warnings generated by expanding
that macro will appear in user code, and will not be suppressed as part of a
system header.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291995 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 04:27:58 +00:00
Eric Fiselier
cdffd52947 Don't force use of lld in tests on Windows
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291987 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-14 01:58:01 +00:00
Eric Fiselier
5ed767588b Diagnose invalid memory orderings in <atomic>
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291976 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-13 23:45:39 +00:00
Eric Fiselier
eaf292013d Diagnose non-const-callable hash functions and comparators
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291969 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-13 22:42:53 +00:00
Eric Fiselier
ebaf7dab14 Add _LIBCPP_DIAGNOSE_WARNING and _LIBCPP_DIAGNOSE_ERROR macros.
Clang recently added a `diagnose_if(cond, msg, type)` attribute
which can be used to generate diagnostics when `cond` is a constant
expression that evaluates to true. Otherwise no attribute has no
effect.

This patch adds _LIBCPP_DIAGNOSE_ERROR/WARNING macros which
use this new attribute. Additionally this patch implements
a diagnostic message when a non-const-callable comparator is
given to a container.

Note: For now the warning version of the diagnostic is useless
within libc++ since warning diagnostics are suppressed by the
system header pragma. I'm going to work on fixing this.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291961 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-13 22:02:08 +00:00
Marshall Clow
ce921fa962 Implement P0426: Constexpr for std::char_traits
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291741 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-12 04:37:14 +00:00
Roger Ferrer Ibanez
47b1cefa76 Mark tests as unsupported under libcpp-no-exceptions
The destructor of std::promise needs to construct a std::future_error
exception so it calls std::make_exception_ptr. But under
libcpp-no-exceptions this will trigger an abort.

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



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291550 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-10 08:48:48 +00:00
Marshall Clow
6b78198fc5 Added XFAIL for the apple versions of clang as well
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291475 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-09 20:29:28 +00:00
Marshall Clow
7d32d2f5a1 Implement P0403R1 - 'Literal suffixes for basic_string_view'. Requires clang 4.0 (specifically, r290744)
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291457 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-09 18:07:34 +00:00
Eric Fiselier
c60e8fcdcd Replace identifiers called __out because Windows.h #defines it.
Windows is greedy and it defines the identifier `__out` as a macro.
This patch renames all conflicting libc++ identifiers in order
to correctly work on Windows.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291345 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-07 11:27:06 +00:00
Stephan T. Lavavej
51eb1be9ec [libcxx] [test] Strip trailing whitespace. NFC, no code review.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291322 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-07 01:12:15 +00:00
Eric Fiselier
5616ee5bac Get all tuple tests passing on Windows
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291311 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-07 00:10:42 +00:00
Eric Fiselier
afd7cc87ce Fix linking of DLL's on Windows
On Windows the runtime search path for DLL's is the same as PATH.
This patch changes the test suite to add the libc++ build directory
to the runtime PATH.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291309 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-07 00:01:55 +00:00
Eric Fiselier
8eb066a106 Replace _LIBCPP_HAS_NO_DELETED_FUNCTIONS with _LIBCPP_CXX03_LANG
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291278 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-06 20:58:25 +00:00
Eric Fiselier
66134e8a5f [libc++] Cleanup and document <__threading_support>
Summary:
This patch attempts to clean up the macro configuration mess in `<__threading_support>`, specifically the mess involving external threading variants. Additionally this patch adds design documentation for `<__threading_support>` and the configuration macros it uses.

The primary change in this patch is separating the idea of an "external API" provided by `<__external_threading>` and the idea of having an external threading library. Now `_LIBCPP_HAS_THREAD_API_EXTERNAL` means that libc++ should use `<__external_threading>` and that the header is expected to exist.  Additionally the new macro `_LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL` is now used to configure for using an "external library"  with the default threading API.

Reviewers: compnerd, rmaprath

Subscribers: smeenai, cfe-commits, mgorny

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291275 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-06 20:05:40 +00:00
Eric Fiselier
dceaa0e352 Add gcc-[56] clang-3.[678] to list of XFAILS for variant tests. Patch from Michael Park
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291094 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 09:06:30 +00:00
Eric Fiselier
704ed27a81 Use C++11 static_assert in variant tests. Patch from Michael Park
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291093 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 09:03:43 +00:00
Eric Fiselier
20f0c0f3a6 Get tests linking on Windows.
This patch is a temporary hack to get the tests passing on
Windows.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291091 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 08:07:17 +00:00
Eric Fiselier
976f3f3ea0 Fix test suite configuration when no lit.site.cfg is available
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291081 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 05:18:37 +00:00
Eric Fiselier
85294a2fac Get test-suite configuring on Windows with clang-cl
This patch gets the test suite "working" on Windows, although
none of the tests pass.

In order to reuse the existing configuration, which uses UNIX
style flags not accepted by clang-cl, this patch only works with clang++.
When clang-cl is specified the test harness secretly looks for
clang++ and then it configures it using the INCLUDE and LIB enviroment
variables.

This is very much a work in progress.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291072 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 03:57:40 +00:00
Eric Fiselier
d0f20b2b08 Fix XPASS buildbot failure related to structured bindings
The test was previously set to XFAIL if __cpp_structured_bindings
wasn't defined. However there are Clang 4.0 versions which do not
define this macro but do provide structured bindings, which causes
the test to pass unexpectedly.

This patch changes the XFAIL to an UNSUPPORTED.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291060 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 01:34:14 +00:00
Eric Fiselier
c3dfeced41 Fix PR26961 - Add default constructor to std::pointer_safety struct.
In ABI v1 libc++ implements std::pointer_safety as a class type instead
of an enumeration. However this class type does not provide
a default constructor as it should. This patch adds that default constructor.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291059 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 01:28:40 +00:00
Eric Fiselier
46a0c2ef0c Fix std::pointer_safety type in ABI v2
In the C++ standard `std::pointer_safety` is defined
as a C++11 strongly typed enum. However libc++ currently defines
it as a class type which simulates a C++11 enumeration. This
can be detected in valid C++ code.

This patch introduces an the _LIBCPP_ABI_POINTER_SAFETY_ENUM_TYPE ABI option.
When defined `std::pointer_safety` is implemented as an enum type.
Unfortunatly this also means it can no longer be provided as an extension
in C++03.

Additionally this patch moves the definition for `get_pointer_safety()`
out of the dylib, and into the headers. New usages of `get_pointer_safety()`
will now use the inline version instead of the dylib version. However in
order to keep the dylib ABI compatible the old definition is explicitly
compiled into it.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291046 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-05 01:15:42 +00:00
Eric Fiselier
2b3c8a28b4 Fix verify test on 32 bit systems
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291031 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 23:30:06 +00:00
Marshall Clow
3df90c94a3 Implement P0505: 'Wording for GB 50'
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291028 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 23:03:24 +00:00
Eric Fiselier
9c6b70a0af Use C++11 static_assert in variant tests. Patch from Michael Park
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291021 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 22:43:08 +00:00
Eric Fiselier
06a0febbbd [libcxx] Re-implement LWG 2770 again: Fix tuple_size to work with structured bindings
Summary:
This patch attempts to re-implement a fix for LWG 2770, but not the actual specified PR. 

The PR for 2770 specifies tuple_size<T const> as only conditionally providing a `::value` member. However C++17 structured bindings require `tuple_size<T const>` to be complete only if  `tuple_size<T>` is also complete. Therefore this patch implements only provides the specialization `tuple_size<T CV>` iff `tuple_size<T>` is a complete type.

This fixes http://llvm.org/PR31513.

Reviewers: mclow.lists, rsmith, mpark

Subscribers: mpark, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@291019 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 22:38:46 +00:00
Marshall Clow
e22af6b758 Implement the last bit of P0031: 'A Proposal to Add Constexpr Modifiers to reverse_iterator, move_iterator, array and Range Access' for C++17
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290976 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 17:58:17 +00:00
Stephan T. Lavavej
dcac520ce4 [libcxx] [test] Strip trailing whitespace.
Fixes D27786.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290922 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 00:53:41 +00:00
Stephan T. Lavavej
3169d4a451 [libcxx] [test] Fix recently introduced warnings emitted by MSVC.
These tests were using malloc()'s return value without checking for null,
which MSVC's /analyze rightly warns about. Asserting that the pointer is
non-null both expresses the test's intention and silences the warning.

Fixes D27785.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290921 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-04 00:53:31 +00:00
Asiri Rathnayake
e262e7b914 [libcxx] Add build/test support for the externally threaded libc++abi variant
Differential revision: https://reviews.llvm.org/D27576

Reviewers: EricWF

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290889 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-03 12:59:50 +00:00
Asiri Rathnayake
e29d9ff936 [libcxx] Fix testing of the externally-threaded library build
after r290850

Before r290850, building libcxx with -DLIBCXX_HAS_EXTERNAL_THREAD_API=ON had two
uses:
  - Allow platform vendors to plug-in an __external_threading header which
    should take care of the entire threading infrastructure of libcxx

  - Allow testing of an externally-threaded library build; where the thread API
    is declared using pthread data structures, and the implementation of this
    API is provided as a separate library (test/support/external_threads.cpp)
   and linked-in when running the test suite.

r290850 breaks the second use case (pthread data structures are no longer
available). This patch re-stores the ability to build+test an
externally-threaded library variant on a pthread based system.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290878 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-03 11:32:31 +00:00
Saleem Abdulrasool
1d19237a46 threading_support: refactor for Win32 threading
Refactor the header to allow us to implement alternate threading models
with alternate data structures.  Take the opportunity to clang-format
the area.  This will allow us to avoid re-declaring the interfaces for
Win32 threading.  NFC

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290850 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-03 02:00:31 +00:00
Eric Fiselier
cfc5515b9d Recommit r290839 - Fix configuring and building libc++ w/o an ABI library.
This patch re-commits a previous attempt to support building libc++ w/o
an ABI library. That patch was originally reverted because:

1) It forgot to teach the test suite about "default" ABI libraries.

2) Some LLVM builders don't clear the CMake cache between builds. The previous
   patch caused those builders to fail since their old cache entry for
   LIBCXX_CXX_ABI="" is no longer valid.

The updated patch addresses both issues. It works around (2) by adding
a hack to force the builders to update their cache entries. The hack will
be removed shortly once all LLVM builders have run.

Original commit message
-----------------------

Typically libc++ uses libc++abi or libcxxrt to provide the ABI and runtime bits
of the C++ STL. However we also support building w/o an ABI library entirely.
This patch fixes building libc++ w/o an ABI library (and incorporates the
`~type_info()` fix in D28211).

The main changes in this patch are:

1) Add `-DLIBCXX_CXX_ABI=default` instead of using the empty string to mean "default".
2) Fix CMake bits which treated "none" as "default" on OS X.
3) Teach the source files to respect `-D_LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY`.
4) Define ~type_info() when _LIBCPP_BUILDING_HAS_NO_ABI_LIBRARY is defined.

Unfortunately this patch doesn't help clean up the macro mess that we use to
configure for different ABI libraries.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290849 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-03 01:18:48 +00:00
Eric Fiselier
408438494b Re-implement LWG 2770 - Fix tuple_size with structured bindings.
This patch implements the correct PR for LWG 2770. It also makes the primary
tuple_size template incomplete again which fixes part of llvm.org/PR31513.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290846 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-02 23:54:13 +00:00
Marshall Clow
4797c1151d Fix some 'FIXME's in the tests.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290758 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 17:42:11 +00:00
Eric Fiselier
bc06f26c7f Recommit r290750: Fix PR19460 - std::ios is convertible to int.
There were two problems with the initial fix.

1. The added tests flushed out that we misconfigured _LIBCPP_EXPLICIT with GCC.

2. Because the boolean type was a member function template it caused weird link
   errors. I'm assuming due to the vague linkage rules. This time the bool type
   is a non-template member function pointer. That seems to have fixed the
   failing tests. Plus it will end up generating less symbols overall, since
   the bool type is no longer per instantiation.

original commit message below
-----------------------------

std::basic_ios has an operator bool(). In C++11 and later
it is explicit, and only allows contextual implicit conversions.

However explicit isn't available in C++03 which causes std::istream (et al)
to have an implicit conversion to int. This can easily cause ambiguities
when calling operator<< and operator>>.

This patch uses a "bool-like" type in C++03 to work around this. The
"bool-like" type is an arbitrary pointer to member function type. It
will not convert to either int or void*, but will convert to bool.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290754 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 14:05:52 +00:00
Eric Fiselier
6ce93e5bd4 Revert r290750 - Fix PR19460 - std::ios is convertible to int.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290752 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 13:11:17 +00:00
Eric Fiselier
01153d5a73 Add missing include in test.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290751 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 12:45:30 +00:00
Eric Fiselier
687c0bbee4 Fix PR19460 - std::ios is convertible to int.
std::basic_ios has an operator bool(). In C++11 and later
it is explicit, and only allows contextual implicit conversions.

However explicit isn't available in C++03 which causes std::istream (et al)
to have an implicit conversion to int. This can easily cause ambiguities
when calling operator<< and operator>>.

This patch uses a "bool-like" type in C++03 to work around this. The
"bool-like" type is an arbitrary pointer to member function type. It
will not convert to either int or void*, but will convert to bool.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290750 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 12:44:58 +00:00
Ed Schouten
1e17bc1faf Remove mblen(), mbtowc() and wctomb() from the thread-unsafe functions.
Back in r240527 I added a knob to prevent thread-unsafe functions from
being exposed. mblen(), mbtowc() and wctomb() were also added to this
list, as the latest issue of POSIX doesn't require these functions to be
thread-safe.

It turns out that the only circumstance in which these functions are not
thread-safe is in case they are used in combination with state-dependent
character sets (e.g., Shift-JIS). According to Austin Group Bug 708,
these character sets "[...] are mostly a relic of the past and which
were never supported on most POSIX systems".

Though in many cases the use of these functions can be prevented by
using the reentrant counterparts, they are the only functions that allow
you to query whether the locale's character set is state-dependent. This
means that omitting these functions removes actual functionality.

Let's be a bit less pedantic and drop the guards around these functions.

Links:
http://austingroupbugs.net/view.php?id=708
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2037.htm

Reviewed by:	ericwf
Differential Revision:	https://reviews.llvm.org/D21436


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290748 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 10:44:00 +00:00
Eric Fiselier
8673c52ffe Get ctype_byname tests passing on Linux.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290746 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 09:28:58 +00:00