Commit Graph

4164 Commits

Author SHA1 Message Date
Marshall Clow f51ee63247 Make next/prev/advance/distance operations on iterators be constexpr. I missed this when I implemented the rest of P0031R0
llvm-svn: 303281
2017-05-17 18:51:36 +00:00
Marshall Clow c1bcd4c1f2 Mark the copy constructor and move
constructor to be constexpr. This only works when the contained type has a constexpr copy/move ctor.

llvm-svn: 303268
2017-05-17 15:30:01 +00:00
Casey Carter 4de0f034cf [test] Add specific test for P0138R2, direct-list-init of fixed enums from integers, part 3/3.
Test the C++17 Core Language feature independently from other std::byte tests.

llvm-svn: 302946
2017-05-12 20:33:46 +00:00
Casey Carter 7bba58f24d [test] Avoid P0138R2, direct-list-init of fixed enums from integers, part 2/3.
This C++17 Core Language feature isn't necessary when testing std::byte.
It's a minor convenience, but it limits test coverage to very new compilers.

This part activates the tests for more compilers.

llvm-svn: 302945
2017-05-12 20:33:41 +00:00
Casey Carter ef475c4d71 [test] Avoid P0138R2, direct-list-init of fixed enums from integers, part 1/3.
This C++17 Core Language feature isn't necessary when testing std::byte.
It's a minor convenience, but it limits test coverage to very new compilers.

This part changes the code.

Fixes D32386.

llvm-svn: 302944
2017-05-12 20:33:32 +00:00
Eric Fiselier 3086b45a2f Fix C++03 test failures caused by static_assert emulation
llvm-svn: 302871
2017-05-12 03:53:56 +00:00
Eric Fiselier 25b9b60dd6 Cleanup test issues reported by STL @ Microsoft.
This patch cleans up a number of issues reported by STL, including:

1) Fix duplicate is_convertible test.
2) Move non-standard reference_wrapper tests under test/libcxx
3) Fix assumption that sizeof(wchar_t) == 32 in the codecvt and
   wstring_convert tests.

llvm-svn: 302870
2017-05-12 03:38:28 +00:00
Eric Fiselier 5b8ab693ab Remove non-standard basic_string_view::clear() member.
This patch removes the clear() member from <string_view>. The
modifier was removed from the TS before it ever landed in the standard.
There is no reason libc++ should be providing this method.

llvm-svn: 302869
2017-05-12 03:35:53 +00:00
Eric Fiselier 581072e1a6 Move POSIX specific test under test/libcxx subdirectory
llvm-svn: 302865
2017-05-12 02:02:09 +00:00
Eric Fiselier 873f8d2ebe Move tests for libc++ configurations into libcxx/ test subdirectory
llvm-svn: 302864
2017-05-12 01:49:32 +00:00
Eric Fiselier 5750a3fa20 Fix or move tests with non-standard assumptions
llvm-svn: 302862
2017-05-12 01:44:51 +00:00
Eric Fiselier 1bb7235026 Guard usage of libc++ regex internals inside test.
This patch attempts to make lookup_classname.pass.cpp usable against
other STL implementations by guarding the use of __regex_word. That being
said it seems likely that the test is still non-conforming due to how
libc++ handles the "w" character class.

llvm-svn: 302859
2017-05-12 01:19:01 +00:00
Eric Fiselier bb78837e4d Fix XFAIL to reflect recent fixes in GCC
llvm-svn: 302841
2017-05-11 23:04:04 +00:00
Marshall Clow 35f62e3228 Mark LWG#2782 as complete. No functionality change; we already do this. Just added a few more tests.
llvm-svn: 302802
2017-05-11 14:25:45 +00:00
Marshall Clow 7e154cdca7 Replace a nested namespace used for overload resolution with a struct. Richard Smith says that using the namespace results in an ODR violation, but I disagree. Nevertheless, the struct works just as well.
llvm-svn: 302800
2017-05-11 14:00:54 +00:00
Marshall Clow afda4a9af9 Mark LWG#2850 as complete. No functionality change; we had tests that covered it already. Just added comments to the tests. Thanks to K-ballo for the heads up.
llvm-svn: 302799
2017-05-11 13:55:20 +00:00
Marshall Clow 9630f46dde Mark LWG#2796 as complete. No functionality change; we had tests that covered it already. Just added comments to the tests
llvm-svn: 302798
2017-05-11 13:51:09 +00:00
Michael Park 215f55f526 Fix `std::visit` for the zero variants case.
Summary:
The following code is broken:

```
    std::visit([]{});
```

Reviewers: EricWF

Reviewed By: EricWF

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

llvm-svn: 302773
2017-05-11 07:17:12 +00:00
Eric Fiselier 3853a41754 Workaround -W#warnings on Windows until the correct fixes can land
llvm-svn: 302743
2017-05-10 23:29:13 +00:00
Eric Fiselier 0c6e7ae4cc Remove usages of _LIBCPP_MSVC which is never defined
llvm-svn: 302736
2017-05-10 21:40:58 +00:00
Eric Fiselier a1bc823a59 Fix MinGW build to use Pthread when the header is available.
Some MinGW configurations use WinPThread instead of the native
threading interfaces. When this happens libc++ doesn't build because
it tries to use the wrong threading API.

This patch attempts to correctly detect and enable pthreads; Selecting
them when __MINGW32__ is defined and __has_include(<pthread.h>) is true.
I'm not sure if this works correctly 100% of the time but it seemed
like the most correct approach available.

llvm-svn: 302734
2017-05-10 21:34:58 +00:00
Eric Fiselier 80f8cfb37f Don't interfere with the __builtin_foo namespace under MSVC
This patch follows up on feedback received in the review for
D32988. Specifically that libc++ should not mess with the
__builtin namespace, and that libc++ should use __popcnt to implement
__pop_count under MSVC.

llvm-svn: 302731
2017-05-10 21:30:04 +00:00
Billy Robert O'Neal III ac831d35cf Fix bad #endif in msvc_stdlib_force_include.hpp.
llvm-svn: 302728
2017-05-10 20:58:30 +00:00
Eric Fiselier 5d50aa3204 [libc++] Refactor Windows support headers.
Summary:
This patch refactors and tries to remove as much of the Windows support headers as possible. This is needed because they currently introduce super weird include cycles and dependencies between STL and libc headers.

The changes in this patch are:

* remove `support/win32/support.h` completely. The required parts have either been moved into `support/win32/msvc_support.h` (for `MSVC` only helpers not needed by Clang), or directly into their respective `foo.h` headers.

* Combine `locale_win32.h` and `locale_mgmt_win32.h` into a single headers, this header should only be included within `__locale` or `locale` to avoid include cycles.

* Remove the unneeded parts of `limits_win32.h` and re-name it to `limits_msvc_win32.h` since it's only needed by Clang.

I've tested this patch using Clang on Windows, but I suspect it might technically regress our non-existent support for MSVC. Is somebody able to double check?

This refactor is needed to support upcoming fixes to `<locale>` on Windows.



Reviewers: bcraig, rmaprath, compnerd, EricWF

Reviewed By: EricWF

Subscribers: majnemer, cfe-commits

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

llvm-svn: 302727
2017-05-10 20:57:45 +00:00
Eric Fiselier d75e451471 Implement LWG 2591 - Patch from K-Ballo
llvm-svn: 302724
2017-05-10 20:37:43 +00:00
Eric Fiselier ff15825401 XFAIL is_trivially_copyable test for compilers that don't implement Core 2094
llvm-svn: 302723
2017-05-10 20:19:35 +00:00
Eric Fiselier f3a74e7d28 Fix enable_shared_from_this test in C++11
llvm-svn: 302721
2017-05-10 20:09:20 +00:00
Eric Fiselier 7b08184d46 Clean up LIT failure output by not showing the entire environment
llvm-svn: 302713
2017-05-10 19:55:42 +00:00
Billy Robert O'Neal III 6957d35a9b Update is_trivially_copyable tests with CWG 2094
Clang 5.0 implements these changes here: 87cd035326
MSVC++ will implement these changes in the first toolset update to 2017.

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

llvm-svn: 302710
2017-05-10 19:43:31 +00:00
Eric Fiselier f09df77236 [libc++] Fix PR32979 - types with a private std::enable_shared_from_this base break shared_ptr
Summary:
This patch fixes bugs.llvm.org/PR32979.

[util.smartptr.shared.const] says:
> In the constructor definitions below, enables shared_from_this with p, for a pointer p of type Y*, means
> that if Y has an unambiguous and accessible base class that is a specialization of enable_shared_from_-
> this.

This means that libc++ needs to respect the access specifier of the base class, and not attempt to construct
and enabled_shared_from_this base if it is private. However access specifiers don't affect overload resolution
so our current implementation will attempt to construct the private base. 

This patch uses SFINAE to correctly detect if the shared_ptr input has an accessible enable_shared_from_this
base class.

Reviewers: mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 302709
2017-05-10 19:35:49 +00:00
Casey Carter 768a93fbeb [test] support machinery changes for EDG & C1XX /Za
This change works around a couple of bugs:

1. EDG doesn't like explicit constexpr in a derived class. This program:

  struct Base {};
  struct Derived : Base {
      constexpr Derived() = default;
  };

  triggers "error: defaulted default constructor cannot be constexpr."

2. C1XX with /Za has no idea which constructor needs to be valid for copy elision.

The change also conditionally disables parts of the msvc_stdlib_force_include.hpp header that conflict with external configuration when _LIBCXX_IN_DEVCRT is defined.

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

llvm-svn: 302707
2017-05-10 19:10:49 +00:00
Eric Fiselier fc861f511a Attempt to speculatively unbreak Apple build bots
llvm-svn: 302627
2017-05-10 08:04:50 +00:00
Eric Fiselier 52ad6e55d9 Rename Appveyor install helper script.
I'm really lazy and the old name for the helper script
killed 2 letter tab completion for the include directory.
This patch renames it to avoid that problem and enable
lazyness.

llvm-svn: 302619
2017-05-10 02:43:02 +00:00
Eric Fiselier e9ee517930 Support using MinGW POSIX threads on Windows
llvm-svn: 302617
2017-05-10 02:36:48 +00:00
Eric Fiselier 8a64fd71b9 attempt to fix appveyor syntax error
llvm-svn: 302616
2017-05-10 02:34:56 +00:00
Eric Fiselier 9fc0ba970a Add MinGW64 builder to Appveyor.
With the amount of work happening on Windows we should
have a MinGW bot to make sure we don't regress that functionality.
Currently it doesn't build :-(

llvm-svn: 302614
2017-05-10 02:30:16 +00:00
Eric Fiselier 9311603160 Improve how LIT reports the added environment variables
llvm-svn: 302607
2017-05-10 00:23:58 +00:00
Eric Fiselier d1eff0e813 Attempt to unbreak Libc++ test configuration
llvm-svn: 302604
2017-05-10 00:05:04 +00:00
Eric Fiselier 3388f7c0cb Fix test runtime environment on Windows
llvm-svn: 302602
2017-05-09 23:57:22 +00:00
Eric Fiselier 78046e4624 Fix misspelling of environment throughout libc++
llvm-svn: 302600
2017-05-09 23:47:20 +00:00
Tom Stellard 5a741dd8a6 docs: Fix Sphinx detection with out-of-tree builds
Adapt to changes made in r302499.

llvm-svn: 302517
2017-05-09 11:18:03 +00:00
Ben Craig bb497d3895 Fix Windows tests when __config_site is present.
Previously, the force includes would complain about a missing _DEBUG symbol.
Now we dump macros before adding the force includes to the command line.
Now with proper newlines.

llvm-svn: 302497
2017-05-09 01:34:12 +00:00
Ben Craig ff63090b0e Revert "Fix Windows tests when __config_site is present."
It's 2017, and line endings are still an issue.

llvm-svn: 302496
2017-05-09 01:26:39 +00:00
Eric Fiselier 50d61da2e4 Fix GCC 7 test failures.
This patch fixes the test failures and unexpected passes that occur
when testing against GCC 7. Specifically:

* don't mark __gcd as always inline because it's a recursive function. GCC diagnoses this.
* don't XFAIL the aligned allocation tests. GCC 7 supports them but not the -faligned-allocation option.
* Work around gcc.gnu.org/PR78489 in variants constructors.

llvm-svn: 302488
2017-05-09 00:00:00 +00:00
Eric Fiselier b4ddab26bc Refactor <locale> RAII guards to aid upcoming Windows locale changes.
Previously <locale> used std::unique_ptr<remove_ptr<locale_t>, locale-mgmt-function>
as a scope guard for (A) creating new locales, and (B) setting the thread specific locale
in RAII safe manner.

However using unique_ptr has some problems, first it requires that locale_t is a pointer
type, which may not be the case (Windows will need a non-pointer locale_t type that emulates _locale_t).

The second problem is that users of the guards had to supply the locale management function to the custom
deleter at every call site. However these locale management functions don't exist natively Windows, making
a good Windows implementation of locale more difficult.

This patch creates distinct and simply RAII guards that replace unique_ptr. These guards handle calling
the correct locale management function so that callers don't have too. This simplification will
aid in upcoming Windows fixes.

llvm-svn: 302474
2017-05-08 22:02:43 +00:00
Billy Robert O'Neal III 362ea7329f Fix possible loss of data warnings on amd64
In T_size_size.pass, there is an explicit template argument to std::min to ask
for unsigned, to avoid type deduction errors. However, C1XX' warnings still
hate this use, because a 64 bit value (a size_t) is being passed to a function
accepting an unsigned (a 32 bit value).

Instead, change the tests to pass around std::size_t instances, and explicitly
narrow when constructing the string type under test. This also allows
removal of explicit template arguments to std::min.

llvm-svn: 302473
2017-05-08 21:54:53 +00:00
Billy Robert O'Neal III 8c401179a3 Resolve integer overflow warnings in GCD and LCM tests
lcm.pass.cpp:
19: Update headers to that actually used in the test.
41: test0 was triggering narrowing warnings for all callers, because the
inputs were always ints, but some of the explicit template arguments were
smaller than that. Instead, have this function accept ints and static_cast
explicitly to the types we want before calling std::lcm.
47: Replace unnecessary ternary.
55: Use foo_t instead of typename foo<>::type
111/116: intX_t were not std::qualified but only <cfoo> headers were included.
141: C1XX has a bug where it interprets 2147483648 as unsigned int. Then the
negation trips "negation of unsigned value, result still unsigned" warnings.
Perma-workaround this issue by saying INT_MIN, which better documents the
intended behavior and avoids triggering warnings on C1XX.

gcd.pass.cpp:
Same changes as lcm.pass.cpp but for GCD.

llvm-svn: 302472
2017-05-08 21:52:05 +00:00
Ben Craig 9669df28d4 Fix Windows tests when __config_site is present.
Previously, the force includes would complain about a missing _DEBUG symbol.
Now we dump macros before adding the force includes to the command line.

llvm-svn: 302421
2017-05-08 13:15:22 +00:00
Eric Fiselier c2d3f4c604 Fix Windows locale detection
llvm-svn: 302396
2017-05-08 02:09:48 +00:00
Eric Fiselier ef40748260 Fix shared_mutex dll import errors on Windows
llvm-svn: 302394
2017-05-08 01:31:50 +00:00
Eric Fiselier 3e254a6ece [libc++] Implement exception_ptr on Windows
Summary:
This patch implements exception_ptr on Windows using the `__ExceptionPtrFoo` functions provided by MSVC.

The `__ExceptionPtrFoo` functions are defined inside the C++ standard library, `msvcprt`, which is unfortunate because it requires libc++ to link to the MSVC STL. However this doesn't seem to cause any immediate problems. However to be safe I kept all usages within the libc++ dylib so that user programs wouldn't have to link to MSVCPRT as well.

Note there are still 2 outstanding exception_ptr/nested_exception test failures.

* `current_exception.pass.cpp` needs to be rewritten for the Windows exception_ptr semantics which copy the exception every time.
* `rethrow_if_nested.pass.cpp` need investigation. It hits a stack overflow, likely from recursion.

This patch also gets most of the `<future>` tests passing as well.

Reviewers: mclow.lists, compnerd, bcraig, rmaprath, majnemer, BillyONeal, STL_MSFT

Subscribers: mgorny, cfe-commits

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

llvm-svn: 302393
2017-05-08 01:17:50 +00:00
Eric Fiselier 6d0dff294c Fix DLL import/export on Win32 locale helpers
llvm-svn: 302391
2017-05-08 00:37:31 +00:00
Eric Fiselier c04013f5f4 Fix DLL import for __time_get_c_storage member functions.
llvm-svn: 302390
2017-05-08 00:29:32 +00:00
Eric Fiselier 10cb6ca12b Revert "Actually remove the MSVC STL when linking and testing libc++ on Windows"
This reverts commit r302387.

llvm-svn: 302389
2017-05-07 23:37:38 +00:00
Eric Fiselier ca40e602bf Actually remove the MSVC STL when linking and testing libc++ on Windows
llvm-svn: 302387
2017-05-07 23:19:14 +00:00
Eric Fiselier cedc1ec3dc Temporarly XFAIL aligned new/delete tests on Windows.
Libc++ doesn't provide its own definitions of new/delete on Windows,
instead using the versions provided by VCRuntime. However VCRuntime
does not yet implement aligned new/delete so these tests fail.

It might be possible for libc++ to provide its own definitions only
for aligned new/delete as long as MSVC doesn't provide it. However
before this can be done libc++ needs to figure out how to implement
std::get_new_handler.

llvm-svn: 302384
2017-05-07 22:10:56 +00:00
Eric Fiselier ea9dc4ae60 Fix Windows test failures caused by identical temp file names.
This patch fixes test failures that occur on Windows because
the tests attempt to generate two distinct temp file names but
get the same name both time.

The fix for this is to create the first temp file before requesting
a second temporary file name. This ensures that the second name
will be unique.

llvm-svn: 302382
2017-05-07 21:41:58 +00:00
Eric Fiselier 07c955c6ed Accept Windows specific output in system error tests
llvm-svn: 302381
2017-05-07 21:21:07 +00:00
Eric Fiselier fc353da22e Fix two test failures caused by Windows mangling of function types.
On Windows the function template `template <class T> void test()` has
the same mangled name when instantiated with the distinct types `void()`
and `void() noexcept`. When this occurs Clang emits an error. This error
was causing two type-traits tests to fail.

However this can be worked around by using class templates instead of
function templates, which is what this patch does to fix the errors.

llvm-svn: 302380
2017-05-07 21:15:28 +00:00
Dimitry Andric 52844c83d0 Ensure showbase does not overflow do_put buffers
Summary:
In https://bugs.freebsd.org/207918, Daniel McRobb describes how using
std::showbase with ostreams can cause truncation of unsigned long long
when output format is octal.  In fact, this can even happen with
unsigned int and unsigned long.

To ensure this does not happen, add one additional character to the
do_put buffers if std::showbase is on.  Also add a test case.

Reviewers: EricWF, mclow.lists

Reviewed By: EricWF

Subscribers: cfe-commits, emaste

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

llvm-svn: 302362
2017-05-06 20:58:50 +00:00
Eric Fiselier 28d89dbd3f Fix lgamma_r linking errors on Windows. It appears the normal lgamma function is thread safe anyway
llvm-svn: 302330
2017-05-06 02:58:43 +00:00
Stephan T. Lavavej e803cc52bd [libcxx] [test] Suppress MSVC's /analyze warning C6294 in a more fine-grained manner.
Fixes D32926.

llvm-svn: 302325
2017-05-05 23:51:39 +00:00
Stephan T. Lavavej a807f5cd62 [libcxx] [test] Fix MSVC "warning C6326: Potential comparison of a constant with another constant".
The expressions `1 == 1` and `true` have the same type, value category, and value.

Fixes D32924.

llvm-svn: 302322
2017-05-05 23:38:24 +00:00
Stephan T. Lavavej 40608ce4c9 [libcxx] [test] Be compatible with LWG 2438 "std::iterator inheritance shouldn't be mandated".
In C++17, these iterators are allowed but not required
to inherit from the deprecated std::iterator base class.

Fixes D32727.

llvm-svn: 302318
2017-05-05 23:01:38 +00:00
Eric Fiselier 8f8241e5c7 Mark test using <sys/time.h> as UNSUPPORTED on Windows
llvm-svn: 302298
2017-05-05 21:32:37 +00:00
Eric Fiselier 0be6d5ba92 Fix condition_variable::wait_until and wait_for on Windows.
The ERROR_TIMEDOUT returned by the Windows API does not
have the same value as ETIMEDOUT. This caused condition_variable
to return timeouts as unknown errors.

llvm-svn: 302297
2017-05-05 21:31:22 +00:00
Eric Fiselier 1a5733af6a Fix detection for [[fallthrough]] with GCC
llvm-svn: 302285
2017-05-05 20:50:24 +00:00
Eric Fiselier f7ae14dbb9 Fix remaining GCC 7 build warnings
llvm-svn: 302283
2017-05-05 20:39:03 +00:00
Eric Fiselier 807790a09b Fix new warnings emitted by GCC 7
llvm-svn: 302280
2017-05-05 20:32:26 +00:00
Eric Fiselier 37dc68c93b Document XFAIL's with the relevent bug number
llvm-svn: 302213
2017-05-05 05:19:21 +00:00
Eric Fiselier 5be171f0bd Fix test failure with GCC 4.9
llvm-svn: 302182
2017-05-04 19:13:28 +00:00
Eric Fiselier 8f6c6b9550 Change Appveyor to download Clang from llvm.org instead of my private server
llvm-svn: 302181
2017-05-04 19:04:50 +00:00
Mehdi Amini e9c66ad9fa Add markup for libc++ dylib availability
Libc++ is used as a system library on macOS and iOS (amongst others). In order
for users to be able to compile a binary that is intended to be deployed to an
older version of the platform, clang provides the
availability attribute <https://clang.llvm.org/docs/AttributeReference.html#availability>_
that can be placed on declarations to describe the lifecycle of a symbol in the
library.

See docs/DesignDocs/AvailabilityMarkup.rst for more information.

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

llvm-svn: 302172
2017-05-04 17:08:54 +00:00
Marshall Clow d6d22fe916 Use lgamma_r instead of lgamma in binomial_distribution, because freakin' POSIX took a perfectly fine call and made it not thread safe.
llvm-svn: 302168
2017-05-04 16:36:39 +00:00
Casey Carter d50571b244 [test] Name the local variable in the C1XX implementation of DoNotOptmize
Differential Revision: https://reviews.llvm.org/D32510

llvm-svn: 302162
2017-05-04 15:54:09 +00:00
Casey Carter 79053ff795 [test] variant: enable constexpr construction tests on MSVC STL
* Add a new macro _MSVC_STL_VER to detect when the MSVC STL is being tested
* Workaround C1XX __is_trivially_copyable bug

llvm-svn: 302158
2017-05-04 15:32:54 +00:00
Eric Fiselier 61a241ef11 Fix incorrect usage of __libcpp_mutex_trylock. Patch from Andrey Khalyavin
llvm-svn: 302129
2017-05-04 07:45:09 +00:00
Eric Fiselier 60ef0e8a8a Update Appveyor bot link to point to new llvm-mirror Appveyor account
llvm-svn: 302128
2017-05-04 07:40:23 +00:00
Eric Fiselier 7d6b2ad5a3 test commit
llvm-svn: 302122
2017-05-04 06:28:34 +00:00
Eric Fiselier e243c3df97 test commit
llvm-svn: 302120
2017-05-04 06:27:06 +00:00
Jonas Hahnfeld 98a7f2798d [libcxx][CMake] Set library dir when built under runtimes/
This will put libraries into the build root's lib/ directory by default.

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

llvm-svn: 302117
2017-05-04 06:02:50 +00:00
Eric Fiselier e483aa1fc2 update buildbot doc to link to the new Appveyor builders
llvm-svn: 302116
2017-05-04 05:58:59 +00:00
Eric Fiselier 385e4fb617 Attempt to enable the LIT progress bar on Appveyor
llvm-svn: 302115
2017-05-04 05:32:54 +00:00
Eric Fiselier d9fadb2de8 Setup Appveyor bot for MSVC 2017 and MSVC 2015
llvm-svn: 302113
2017-05-04 05:16:48 +00:00
Stephan T. Lavavej 6081edc9d0 [libcxx] [test] Strip trailing whitespace. NFC.
llvm-svn: 302105
2017-05-04 01:43:58 +00:00
Stephan T. Lavavej a7e1ac58c4 [libcxx] [test] In msvc_stdlib_force_include.hpp, use _HAS_CXX17 to set TEST_STD_VER.
_HAS_CXX17 indicates whether MSVC's STL is in C++17 mode.

In MSVC there's a distinction between CRT headers like stdlib.h and STL headers
like cstdlib. Only the STL headers drag in yvals.h, our internal STL-wide header
that defines internal macros like _HAS_CXX17.

_HAS_CXX17 is an MSVC STL library macro, unconditionally defined. We centralize
everything on this, because we have to ask different questions to determine
whether C1XX, EDG, or Clang is in 14 or 17 mode, and we additionally permit
users to override the detection in one way (it's okay to ask for 17 from the
compiler, but only 14 from the libs, at least for the moment; only noexcept
in the type system will give us a headache).

As this header is for testing MSVC's STL, we can assume _HAS_CXX17 is defined.

Fixes D32726.

llvm-svn: 302104
2017-05-04 01:35:11 +00:00
Eric Fiselier bdde34828b Attempt to escape paths correctly
llvm-svn: 302102
2017-05-04 01:17:22 +00:00
Eric Fiselier dc4e327ffa Attempt to setup MSVC 2017
llvm-svn: 302101
2017-05-04 01:17:21 +00:00
Eric Fiselier 9c973b9f62 Use nullptr instead of the literal 0
llvm-svn: 302100
2017-05-04 01:06:56 +00:00
Eric Fiselier 6b88dae046 Fix macro redefinition warnings for _LIBCPP_NO_RTTI
llvm-svn: 302099
2017-05-04 01:06:54 +00:00
Eric Fiselier 8e23870585 Test commit for Appveyor - Remove incorrect caching logic
llvm-svn: 302097
2017-05-04 00:16:35 +00:00
Duncan P. N. Exon Smith 8e5f0409fb CMake: Only add test/ subdirectory when it exists
r296685 started adding the test/ subdirectory even when
LIBCXX_INCLUDE_TESTS=OFF.  This is great for testing libcxx standalone,
but it also breaks the build when the test/ subdirectory is removed
(and our submission system strips all test/ directories).

This patch updates the logic to check for test/ before adding it.

rdar://problem/31931366

llvm-svn: 302095
2017-05-03 23:33:54 +00:00
Eric Fiselier 7fe1e995f4 Attempt to fix appveyor build
llvm-svn: 302084
2017-05-03 21:14:26 +00:00
Eric Fiselier 1f8b73d15c Qualify calls to __invoke, __apply_fuctor, and __mu
llvm-svn: 302082
2017-05-03 21:02:19 +00:00
Justin Lebar dd9a4b9ae8 Add missing acquire_load to call_once overload.
Summary: Seemed to have been overlooked in D24028.

This bug was found and brought to my attention by Paul Wankadia.

Reviewers: kubamracek, EricWF, dvyukov

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

llvm-svn: 301132
2017-04-23 16:58:48 +00:00
Duncan P. N. Exon Smith 42f8eee150 cmath: Skip Libc for integral types in isinf, etc.
For std::isinf, the standard requires effectively calling isinf as
double from Libc for integral types. But integral types are never
infinite; we don't need to call Libc to return false.

Also short-circuit other functions where Libc won't have interesting
answers: signbit, fpclassify, isfinite, isnan, and isnormal.

I added correctness tests for integral types since we're no longer
deferring to Libc.

In review it was pointed out that in future revisions of the C++
standard we may add more types to std::is_arithmetic (e.g.,
std::is_fixed_point).  I'll leave it to a future commit to hack this to
allow using math functions on those.  We'll need to change things like
__libcpp_fpclassify anyway, so I'm not sure anything here would really
be future-proof.

https://reviews.llvm.org/D31561
rdar://problem/31361223

llvm-svn: 301060
2017-04-21 23:14:55 +00:00
Casey Carter c24d7974bc Expand test coverage for LWG2857
* Cover optional's emplace-from-initializer_list overload

* Verify that any::emplace and optional::emplace return a reference to the correct type even for throwing cases.

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

llvm-svn: 301055
2017-04-21 22:38:59 +00:00
Eric Fiselier ef58b0401a update XFAIL comments with more details
llvm-svn: 300944
2017-04-21 03:09:40 +00:00
Eric Fiselier 9ddcc55228 Mark exception_ptr tests as XFAIL on Windows for now
llvm-svn: 300942
2017-04-21 02:13:33 +00:00
Eric Fiselier 0ea799a79c XFAIL Windows test failures under test/libcxx
This patch XFAIL's a number of tests under test/libcxx when on Windows.
These failures need more investigation or patches to either Clang or libc++
but for now we don't want them to prevent the bot from going green.

llvm-svn: 300941
2017-04-21 01:48:02 +00:00
Billy Robert O'Neal III 49ee2a0f28 Resolve unused local typedef warning in test.
llvm-svn: 300937
2017-04-21 01:10:04 +00:00
Eric Fiselier df8f1c0fc7 Fix 'verify-support' available feature
llvm-svn: 300934
2017-04-21 00:43:07 +00:00
Shoaib Meenai 8048b44a8c [libc++] Default to vcruntime when targeting MSVC
Summary:
libc++abi is never the right option for LIBCXX_TARGETING_MSVC, since it
targets the Itanium ABI, whereas MSVC uses the Microsoft ABI. Make the
default ABI be vcruntime when targeting MSVC even if libc++abi is
present in the tree.

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

llvm-svn: 300921
2017-04-20 23:33:49 +00:00
Eric Fiselier c411225462 Fix ATOMIC_<TYPE>_LOCK_FREE macros on Windows.
Previously the ATOMIC_<TYPE>_LOCK_FREE macros were implemented
using __GCC_ATOMIC_<TYPE>_LOCK_FREE but GCC specific macros
are defined when -fms-compatibility is specified.

To avoid this Libc++ now tries to use the newly added
__CLANG_ATOMIC_<TYPE>_LOCK_FREE macros instead, and only falls
back to the GCC versions when the Clang ones aren't available.

llvm-svn: 300920
2017-04-20 23:22:46 +00:00
Eric Fiselier 91bd4d9048 Fix comment and remove incorrect linker flags in test configuration
llvm-svn: 300881
2017-04-20 20:22:19 +00:00
Eric Fiselier ed004ef206 Disable the filesystem library on Windows by default
llvm-svn: 300820
2017-04-20 04:24:29 +00:00
Eric Fiselier 70a3eb60ed Rename the static version of libc++ on Windows.
Previously both the static version of libc++ and the
import library for the DLL had the same name, 'c++.lib'.

This patch renames the static library on Windows to be `libc++.lib`
so it no longer conflicts. This naming convention is consistent with
other windows libraries.

llvm-svn: 300817
2017-04-20 04:19:02 +00:00
Eric Fiselier 536339e18e Make linker errors verbose on Windows
llvm-svn: 300809
2017-04-20 01:50:39 +00:00
Eric Fiselier 77ad0d7089 Fix dllimport on a class template
llvm-svn: 300808
2017-04-20 01:45:15 +00:00
Eric Fiselier 6b98e43eb4 change what branches Appveyor builds
llvm-svn: 300788
2017-04-19 23:27:48 +00:00
Eric Fiselier ae44aee984 Add appveyor.yml config for a future Windows bot.
I'm currently trying to get a libc++ Windows builder working on appveyor.
This patch adds the configuration file needed to build libc++ on Appveyor.
Details of where the buildbot can be found will come later

llvm-svn: 300786
2017-04-19 23:26:21 +00:00
Eric Fiselier 4a3a870da9 Fix typo in Windows test configuration code
llvm-svn: 300770
2017-04-19 21:52:08 +00:00
Shoaib Meenai 3698889a7b [libc++] Use _LIBCPP_ABI_MICROSOFT instead of _MSC_VER
_LIBCPP_ABI_MICROSOFT is more appropriate to use here, since the
conditionals are controlling Microsoft mangling. It wasn't used
originally since it didn't exist at the time.

llvm-svn: 300743
2017-04-19 20:11:04 +00:00
Eric Fiselier 2662e56d25 Fix tests for extended noexcept in the container adaptors tests
llvm-svn: 300652
2017-04-19 02:07:12 +00:00
Eric Fiselier 6ded58e279 Cleanup usages of _LIBCPP_HAS_NO_<c++11-feature> in <exception>
llvm-svn: 300649
2017-04-19 01:35:58 +00:00
Eric Fiselier 046492b932 Cleanup usages of _LIBCPP_HAS_NO_<c++11-feature> in <bitset>, <ios>, <locale>, and <iterator>
llvm-svn: 300648
2017-04-19 01:34:08 +00:00
Eric Fiselier 7e23afcb60 Cleanup remaining usages of _LIBCPP_HAS_NO_<c++11-feature> in the functional library
llvm-svn: 300646
2017-04-19 01:28:47 +00:00
Eric Fiselier 2987087182 Cleanup remaining usages of _LIBCPP_HAS_NO_<c++11-feature> in tuple and utility
llvm-svn: 300644
2017-04-19 01:23:39 +00:00
Eric Fiselier afa7a957bd Cleanup remaining _LIBCPP_HAS_NO_<c++11-feature> usages in container headers
llvm-svn: 300643
2017-04-19 01:23:04 +00:00
Eric Fiselier 9adebede00 Cleanup _LIBCPP_HAS_NO_<c++11-feature> in support headers and final tests
llvm-svn: 300637
2017-04-19 01:02:49 +00:00
Eric Fiselier 95f8e6aa55 Cleanup _LIBCPP_HAS_NO_<c++11-feature> in the utilities library
llvm-svn: 300635
2017-04-19 00:56:32 +00:00
Eric Fiselier 414d17c67c Cleanup _LIBCPP_HAS_NO_<c++11-feature> in the string library.
llvm-svn: 300633
2017-04-19 00:28:44 +00:00
Eric Fiselier 69154d6e07 Cleanup _LIBCPP_HAS_NO_<c++11-feature> macros in the numeric tests and headers
llvm-svn: 300632
2017-04-19 00:23:45 +00:00
Eric Fiselier 9f7cc58f81 Cleanup _LIBCPP_HAS_NO_<c++11-features> macro usage in regex
llvm-svn: 300627
2017-04-18 23:42:15 +00:00
Eric Fiselier f0aca21e09 Cleanup _LIBCPP_HAS_NO_<c++11-feature> in the input.output library
llvm-svn: 300626
2017-04-18 23:38:41 +00:00
Eric Fiselier ddda456a76 Cleanup _LIBCPP_HAS_NO_<c++11-feature> in algorithm
llvm-svn: 300625
2017-04-18 23:26:47 +00:00
Eric Fiselier 94b2bde631 Cleanup _LIBCPP_HAS_NO_<c++11-feature> macros for std::initializer_list
llvm-svn: 300623
2017-04-18 23:09:36 +00:00
Eric Fiselier e11fb13b60 Cleanup _LIBCPP_HAS_NO_<c++11-feature> macros in thread.
llvm-svn: 300622
2017-04-18 23:05:08 +00:00
Eric Fiselier 6a470bcb6d Cleanup _LIBCPP_HAS_NO_<c++11-feature> in std::unordered_map and std::unordered_multimap
This completes the cleanup of the containers, at least within the tests.

llvm-svn: 300620
2017-04-18 22:50:56 +00:00
Eric Fiselier f0f86ef96f Cleanup _LIBCPP_HAS_NO_<c++11-feature> macros in std::unordered_set and std::unordered_multiset
llvm-svn: 300619
2017-04-18 22:37:32 +00:00
Eric Fiselier f5427b26d3 Cleanup _LIBCPP_HAS_NO_<c++11-feature> for std::queue and std::priority_queue.
llvm-svn: 300604
2017-04-18 21:23:18 +00:00
Eric Fiselier 7196ee3175 Cleanup _LIBCPP_HAS_NO_<c++11-feature> macro uses in std::stack.
llvm-svn: 300602
2017-04-18 21:16:26 +00:00
Eric Fiselier 1829311665 Cleanup _LIBCPP_HAS_NO_<c++11-feature> macros in std::map and std::multimap
llvm-svn: 300600
2017-04-18 21:08:06 +00:00
Eric Fiselier 922940b627 Cleanup _LIBCPP_HAS_NO_<c++11-feature> for std::set and std::multiset
llvm-svn: 300595
2017-04-18 20:58:03 +00:00
Casey Carter 38c3c0b034 [test] Silence another unused-typedef warning
llvm-svn: 300581
2017-04-18 20:04:39 +00:00
Casey Carter e699fa997f [test] Silence unused parameter/typedef warnings
llvm-svn: 300575
2017-04-18 18:44:33 +00:00
Marshall Clow ea9c5465dc Mark LWG#2788 as complete - we already do this
llvm-svn: 300568
2017-04-18 17:22:49 +00:00
Eric Fiselier 74619721a9 Emit benchmark tests into the benchmarks build directory, not lib/
llvm-svn: 300533
2017-04-18 07:40:22 +00:00
Eric Fiselier 133a72069e Update google benchmark
llvm-svn: 300530
2017-04-18 07:17:20 +00:00
Billy Robert O'Neal III e52a34bd9d Allow a standard library to implement conditional noexcept for optional and unique_ptr hash functions.
These tests were unconditionally asserting that optional and unique_ptr declare throwing hashes, but MSVC++ implements conditional noexcept forwarding that of the underlying hash function. As a result we were failing these tests but there's nothing forbidding strengthening noexcept in that way.

Changed the ASSERT_NOT_NOEXCEPT asserts to use types which themselves have non-noexcept hash functions.

llvm-svn: 300516
2017-04-18 00:19:50 +00:00
Eric Fiselier 8948264ed7 Work around GCC 4.9 bug regarding default initialization of const variables
llvm-svn: 300510
2017-04-17 22:32:02 +00:00
Eric Fiselier 86321b2bc8 Fix passing incorrectly value-category when constructing unique_ptr's deleter
llvm-svn: 300489
2017-04-17 20:20:27 +00:00
Casey Carter e3bdfe639c [optional] Update synopsis for LWG2934
(comment-only change)

llvm-svn: 300488
2017-04-17 20:15:16 +00:00
Marshall Clow d588b56d9c Sigh. Once again forgot about the 'no exceptions' bots.
llvm-svn: 300451
2017-04-17 14:18:44 +00:00
Marshall Clow f0d59405f0 Mark LWG#2853 as complete. No code changes required, but added a couple of extra tests
llvm-svn: 300449
2017-04-17 13:19:14 +00:00
Eric Fiselier 2bbb4ecd94 Cleanup one more <forward_list> test
llvm-svn: 300417
2017-04-16 04:05:15 +00:00
Eric Fiselier 99f2c00199 Replace _LIBCPP_HAS_NO_<C++03 feature> with _LIBCPP_CXX03_LANG in <forward_list>
llvm-svn: 300415
2017-04-16 04:02:01 +00:00
Eric Fiselier cf9ed00dfa Replace _LIBCPP_HAS_NO_<C++03 feature> with _LIBCPP_CXX03_LANG in <list>
llvm-svn: 300414
2017-04-16 03:45:35 +00:00
Eric Fiselier a9d646a08b Replace _LIBCPP_HAS_NO_<C++03 feature> with _LIBCPP_CXX03_LANG in deque
llvm-svn: 300413
2017-04-16 03:17:01 +00:00
Eric Fiselier 208156e88b Replace _LIBCPP_HAS_NO_<C++03 feature> with _LIBCPP_CXX03_LANG in <array>
llvm-svn: 300412
2017-04-16 02:50:40 +00:00