Commit Graph

4171 Commits

Author SHA1 Message Date
Duncan P. N. Exon Smith
10a803db2c any: Add availability for experimental::bad_any_cast
As a follow up to r302172, add missing availability for bad_any_cast.

rdar://problem/32161524

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305647 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-18 14:52:26 +00:00
Eric Fiselier
4b1c560ca3 Fix potential bug by casting to the POSIX specified type
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305549 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-16 06:17:52 +00:00
Eric Fiselier
73202133d9 Allow the libc++ C header wrappers to be included when compiling C.
C99 at least. C89 still fails due to the use of block comments.

NOTE: Having libc++ on the include path when compiling C is not
recommended or ever really supported. However it happens often
enough that this change is warrented.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305539 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-16 01:57:41 +00:00
Eric Fiselier
660d2654f8 Allow coroutine_handle<const T> to support creation from const references to the promise_type
It seems conceivable that a user would need to get a coroutine handle
having only a const reference to the promise_type, for example from
within a const member function of the promise.

This patch allows that use case. A coroutine_handle<const T> can be used
in essentially the same way a coroutine_handle<T>, ie to start and destroy
the coroutine. The constness of the promise doesn't/shouldn't propagate
to the handle.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305536 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-16 00:36:17 +00:00
Marshall Clow
daea5bc508 Add missing include to __bsd_locale_fallbacks.h. Fixes https://bugs.llvm.org/show_bug.cgi?id=33370
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305469 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-15 14:31:11 +00:00
Marshall Clow
270a04fb06 Renamed some of the newly added tests. No functional change
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305453 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-15 05:44:49 +00:00
Eric Fiselier
5f8e0d7ed9 attempt to fix GCC ToT build failures
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305451 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-15 03:50:02 +00:00
Eric Fiselier
63e0adbe3a Fix another test with modules enabled
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305448 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-15 03:03:45 +00:00
Eric Fiselier
924c998c0e remove incorrectly committed assertion
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305447 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-15 03:02:43 +00:00
Eric Fiselier
954bf04d1d Add hack to get --param=enable_modules=true working with a __config_site header
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305446 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-15 02:54:15 +00:00
Eric Fiselier
8c6e35cf2c Fix test when modules are enabled
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305445 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-15 02:54:12 +00:00
Eric Fiselier
957d7f4ec7 Move external instantiation for __vector_base_common to vector.cpp
Previously the explicit instantiation for this was in locale.cpp,
but that didn't make much sense. This patch creates a new vector.cpp
source file to contain the explicit instantiation.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305442 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-15 01:53:12 +00:00
Aditya Kumar
aa356d6b86 [locale] Avoid copy of __atoms when char_type is char
The function num_get<_CharT>::stage2_int_prep makes unnecessary copy of src
into atoms when char_type is char. This can be avoided by creating
a switch on type and just returning __src when char_type is char.

Added the test case to demonstrate performance improvement.
In order to avoid ABI incompatibilities, the changes are guarded
with a macro _LIBCPP_ABI_OPTIMIZED_LOCALE_NUM_GET

Differential Revision: https://reviews.llvm.org/D30268
Reviewed by: EricWF

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305427 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-14 23:17:45 +00:00
Marshall Clow
405af58e6b Rework some metaprogramming to use the detection idiom; no functional change
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305417 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-14 21:23:57 +00:00
Marshall Clow
ff5f9b28ba Add some const_casts in places where we were implicitly casting away constness. No functional change, but now they're explicit
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305410 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-14 20:00:36 +00:00
Marshall Clow
899f113f6c In several places in std::allocator<const T> (and one in shared_ptr, we were casting a 'const T*' to a 'void *' - implicitly casting away the const. Add const_cast to make that explicit. No functional change.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305397 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-14 16:54:43 +00:00
James Y Knight
13498f6888 PR32476: __nop_locale_mgmt.h not needed with newlib 2.5+
Newlib 2.5 added the locale management functions, so it should not
include __nop_local_mgmt.h. This change adds proper guard around that
include statement.

For newlib 2.4, some releases contain these functions and some don't,
and they all have the same version numbers. This patch will work
properly with the initial "2.4.0" release which does not include these
functions and require __nop_local_mgmt.h.

This has been tested against newlib 2.2 and 2.5, and also sanity
checks against other different version numbers.

Patch by Martin J. O'Riordan and Walter Lee

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305394 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-14 16:40:03 +00:00
Michael Park
eaa74739c0 Mark __is_inplace_* tests as UNSUPPORTED in <= C++14.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305373 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-14 07:12:55 +00:00
Michael Park
c590dae5d6 Add an __is_inplace_index metafunction.
Summary: This is used to constrain `variant`'s converting constructor correctly.

Reviewers: EricWF, mclow.lists

Reviewed By: EricWF, mclow.lists

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305370 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-14 05:51:18 +00:00
Marshall Clow
0175dfdfdf Implement the non-parallel versions of reduce and transform_reduce for C++17
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305365 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-14 04:48:45 +00:00
Marshall Clow
246eb897c9 Fix bug 33389 - __is_transparent check requires too much
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305292 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-13 14:34:58 +00:00
Marshall Clow
6bb9569124 Add a test with an empty input range - should do nothing
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305268 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-13 02:28:40 +00:00
Marshall Clow
3128b5abf0 Mark the recent variant test as UNSUPPORTED for C++ before 17
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305198 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-12 16:33:41 +00:00
Marshall Clow
bc37f8d93d Make tuple_element static_assert in pair if the index is out of range. Also, add a message to variant_alternative<> in the similar case (it already asserted). Add tests for this
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305196 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-12 16:13:17 +00:00
Marshall Clow
568c481c7b [array.tuple]/1 says that instantiating tuple_element<N, array<T, M>> is ill-formed if N >= M. We didn't do that. Add a static_assert to cause a failure, and a test that checks that we failed
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305191 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-12 14:41:37 +00:00
Marshall Clow
fb97c4408f Implement the non-parallel versions of exclusive_scan and transform_exclusive_scan. Reviewed as https://reviews.llvm.org/D34038.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305136 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-10 02:22:13 +00:00
Stephan T. Lavavej
76836caa7d [libcxx] [test] Update locale names for Windows.
locale.codecvt.byname/ctor_char.pass.cpp:
This test used to use "en_US" as a plain string instead of using platform_support.
Need to fix this because MS STL expects "en-US" instead.

platform_support.h:
These are the legacy Windows locale names. Should use IETF tags instead.
I've also added en_US, since a test was using that as a locale string as well.

msvc_stdlib_force_include.hpp:
Remove _MSVC_STL_VER. The libraries will directly define _MSVC_STL_VERSION in the future.

Fixes D29351.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@305000 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-08 18:22:03 +00:00
Stephan T. Lavavej
8ba816b366 [libcxx] [test] Remove a Clang/C2 workaround.
Clang/LLVM doesn't need this workaround.

Fixes D33955.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304999 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-08 18:21:59 +00:00
Eric Fiselier
c597e3867e XFAIL tuple deduction guide test on GCC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304969 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-08 08:03:35 +00:00
Eric Fiselier
3113ac6f85 Add tests for class template deduction on std::tuple.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304967 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-08 07:18:17 +00:00
Eric Fiselier
d66e43aff1 Revert r304955 - Fix class template deduction for scoped_lock.
Richard decided to fix these cases in Clang, even though they are
representative of a larger problem for more complex
cases.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304966 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-08 07:18:15 +00:00
Eric Fiselier
1cf5591af9 Fix class template deduction for scoped_lock.
r304862 changed how CTD handles deducing a non-primary class template
using a non-dependent constructor of the primary template. This change
requires libc++ to provide explicit deduction guides to make scoped_lock
work again.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304955 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-08 00:38:56 +00:00
Eric Fiselier
276a69c18b Fix compile error with Bionic's PTHREAD_MUTEX_INITIALIZER
On Bionic PTHREAD_MUTEX_INITIALIZER contains the expression "<enum-type> & <integer-type>",
which causes ADL to perform name lookup for operator&. During this lookup Clang decides
that it requires the default member initializer for std::mutex while defining the DMI
for std::mutex::__m_.

If I'm not mistaken this is caused by the explicit noexcept declaration on the defaulted
constructor.

This patch removes the explicit noexcept and instead allows the compiler to declare
the default constructor implicitly noexcept. It also adds a static_assert to ensure
that happens.

Unfortunatly because it's not easy to change the value of _LIBCPP_MUTEX_INITIALIZER
for a single test there is no good way to test this patch.

The Clang behavior causing the trouble here was introduced in r287713, which first
appears in the 4.0 release.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304942 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-07 20:47:42 +00:00
Michael Park
8f0ca59708 Mark LWG 2904 as complete.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304893 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-07 10:27:17 +00:00
Michael Park
3762fe69d2 Implement LWG 2904.
Summary:
- Removed the move-constructibe requirement from copy-assignable.
- Updated `__assign_alt` such that we direct initialize if
  `_Tp` can be `nothrow`-constructible from `_Arg`, or `_Tp`'s
  move construction can throw. Otherwise, construct a temporary and move it.
- Updated the tests to remove the pre-LWG2904 path.

Depends on D32671.

Reviewers: EricWF, CaseyCarter

Reviewed By: EricWF

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304891 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-07 10:22:43 +00:00
Eric Fiselier
7457967300 Fix test with exceptions disabled
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304883 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-07 09:06:05 +00:00
Casey Carter
3da9072b08 [test] Test changes to accommodate LWG 2904 "Make variant move-assignment more exception safe"
Also: Move constexpr / triviality extension tests into the std tree and make them conditional on _LIBCPP_VERSION / _MSVC_STL_VERSION.

https://reviews.llvm.org/D32671

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304847 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-07 00:06:04 +00:00
Casey Carter
57a009ae03 add missing constexpr to optional::value_or
[Credit to cpplearner]

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304813 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-06 18:47:26 +00:00
Stephan T. Lavavej
018fbafdf3 [libcxx] [test] Add _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to msvc_stdlib_force_include.hpp.
This macro will instruct MSVC's STL to not warn about features that are deprecated in C++17,
as libcxx tests those features and uses them elsewhere.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304765 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-06 02:46:12 +00:00
Casey Carter
91d004da6c [test] Remove workaround for C1XX empty parameter pack bug
Was VSO#109062. This bug was filed *4 years ago*. I submitted a workaround to enable the scoped_allocator_adaptor tests to pass. Bug fixed a week and a half later. This was either a waste of my time, or I've discovered that libc++ has magical bugfix-inducing powers. My money's on the latter.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304730 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-05 19:59:17 +00:00
Marshall Clow
118d2fef02 Fix the recently introduced test to work on C++03
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304629 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-03 01:21:29 +00:00
Marshall Clow
b1d8bca727 Fix some undefined behavior in __hash_table. Thanks to vsk for the report and the patch. Reviewed as https://reviews.llvm.org/D33588.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304617 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-03 00:08:32 +00:00
Vedant Kumar
c689592890 Mark two coroutine tests as unsupported under ubsan, again
This reverts commit r304580, making bool_await_suspend.pass.cpp and
generator.pass.cpp unsupported on ubsan again. The host compiler is
based on r304329, which has the change from PR33271 (r304277). However,
this was not enough to address the issue.

Bot Failure:
http://lab.llvm.org:8011/builders/libcxx-libcxxabi-x86_64-linux-ubuntu-ubsan/builds/628

Unknown type!
UNREACHABLE executed at /home/eric/full-llvm/llvm/lib/IR/ValueTypes.cpp:287!
llvm::EVT::getEVT(llvm::Type*, bool) (/usr/local/bin/clang-5.0+0x17e7a07)
llvm::TargetLoweringBase::getValueType(llvm::DataLayout const&, llvm::Type*, bool) const (/usr/local/bin/clang-5.0+0x852c4a)
llvm::ComputeValueVTs(llvm::TargetLowering const&, llvm::DataLayout const&, llvm::Type*, llvm::SmallVectorImpl<llvm::EVT>&, llvm::SmallVectorImpl<unsigned long>*, unsigned long) (/usr/local/bin/clang-5.0+0x141b6e9)
 llvm::SelectionDAGBuilder::visitTargetIntrinsic(llvm::CallInst const&, unsigned int) (/usr/local/bin/clang-5.0+0x237b1ca)

clang-5.0: /home/eric/full-llvm/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp:1236: virtual void llvm::DwarfDebug::endFunctionImpl(const llvm::MachineFunction *): Assertion `LScopes.getAbstractScopesList().size() == NumAbstractScopes && "ensureAbstractVariableIsCreated inserted abstract scopes"' failed.
__assert_fail_base /build/glibc-9tT8Do/glibc-2.23/assert/assert.c:92:0
(/lib/x86_64-linux-gnu/libc.so.6+0x2dc82)
llvm::DwarfDebug::endFunctionImpl(llvm::MachineFunction const*) (/usr/local/bin/clang-5.0+0x223f86b)
llvm::DebugHandlerBase::endFunction(llvm::MachineFunction const*) (/usr/local/bin/clang-5.0+0x227a5a1)
llvm::AsmPrinter::EmitFunctionBody() (/usr/local/bin/clang-5.0+0x222522f)

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304591 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-02 20:06:49 +00:00
Vedant Kumar
84d753555f Revert "Mark two coroutine tests as unsupported under ubsan"
This reverts commit r304462, thereby re-enabling two tests under ubsan.
We expect these tests to pass now that PR33271 is fixed.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304580 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-02 18:30:16 +00:00
Casey Carter
2e612e1621 [test] Allow non-libc++ coroutine_handle::done to strengthen noexcept
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304487 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-01 22:40:16 +00:00
Vedant Kumar
974e519e85 Mark two coroutine tests as unsupported under ubsan
They appear to crash inside of SelectionDAG on some Linux bots, when
ubsan is enabled.

https://bugs.llvm.org/show_bug.cgi?id=33271

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304462 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-01 20:00:40 +00:00
Vedant Kumar
a9d992d310 Remove ubsan XFAILS in two tests
These two tests are ubsan-clean now:
http://lab.llvm.org:8080/green/job/clang-stage2-cmake-RgSan_check/3553/

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304450 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-01 18:48:27 +00:00
Eric Fiselier
01e23b3a4b Fix name used in -verify diagnostic to match trunk
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304384 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-01 02:31:01 +00:00
Eric Fiselier
59e24fe13c Fix more unreserved names
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304383 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-01 02:29:37 +00:00
Eric Fiselier
bf86c8f4dc Rename unreserved names in tuple
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@304382 91177308-0d34-0410-b5e6-96231b3b80d8
2017-06-01 02:14:21 +00:00