Commit Graph

4099 Commits

Author SHA1 Message Date
Eric Fiselier
c1b1d7f0bb Fix hash requirements check in __hash_table.
r296565 attempted to add better diagnostics when an unordered container
is instantiated with a hash that doesn't meet the Hash requirements.

However I mistakenly checked the wrong set of requirements. Specifically
it checked if the hash met the requirements for specializations of
std::hash. However these requirements are stricter than the generic
Hash requirements.

This patch fixes the assertions to only check the Hash requirements.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296919 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-03 22:35:58 +00:00
Mehdi Amini
c795c2a010 Fix libc++ test to pass in C++03 mode
Was hitting: "error: scalar initializer cannot be empty"

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296889 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-03 17:24:29 +00:00
Eric Fiselier
f4dfb45247 Clean up more usages of _LIBCPP_HAS_NO_RVALUE_REFERENCES
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296854 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-03 03:43:25 +00:00
Eric Fiselier
04732df052 Fix sign-compare warning in test; Oddly this only appears on OS X
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296851 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-03 02:02:07 +00:00
Eric Fiselier
778ec30428 Work around test failure on 32 bit OS X
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296840 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 23:18:40 +00:00
Eric Fiselier
92dbfc48cc remove max_size() extension from polymorphic_allocator. It is unneeded
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296831 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 22:10:14 +00:00
Mehdi Amini
3df9fd8924 Fix libc++ test experimental/algorithms/alg.random.sample/sample.pass.cpp when ran in c++11 mode 32 bits
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296830 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 22:08:42 +00:00
Eric Fiselier
0cbd39f03a Work around GCC linking errors within libc++abi due to missing new/delete definitions
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296822 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 21:55:03 +00:00
Eric Fiselier
f282bc8767 Fix test failures caused by new/delete calls getting optimized away
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296813 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 21:16:35 +00:00
Eric Fiselier
c6748b28c4 Update ABI list for 4.0 release
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296805 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 19:59:53 +00:00
Eric Fiselier
dc69aac6c6 [libc++] Add option to disable new/delete overloads when libc++abi provides them.
Summary:
Currently both libc++ and libc++abi provide definitions for operator new/delete. However I believe this is incorrect and that one or the other should offer them.

This patch adds the CMake option `-DLIBCXX_ENABLE_NEW_DELETE_DEFINITIONS` which defaults no `ON` unless `-DLIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS=ON` is specified.



Reviewers: mclow.lists, mehdi_amini, dexonsmith, danalbert, smeenai, mgorny, rmaprath

Reviewed By: mehdi_amini

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296802 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 19:35:33 +00:00
Shoaib Meenai
6b7349243e [libc++] Make _LIBCPP_TYPE_VIS export members
Summary:
Most classes annotated with _LIBCPP_TYPE_VIS need to have at least some
of their members exported, otherwise we have a lot of link errors when
linking against a libc++ built with hidden visibility. This also makes
_LIBCPP_TYPE_VIS be consistent across platforms, since on Windows it
already exports members.

With this change made, any template methods of a class marked
_LIBCPP_TYPE_VIS will also get default visibility when instantiatied,
which is not desirable for clients of libc++ headers who wish to control
their visibility; this is the same issue as PR30642. Annotate all
problematic methods with an explicit visibility specifier to avoid this.

The problematic methods were found by running bad-visibility-finder [1]
against the libc++ headers after making the _LIBCPP_TYPE_VIS change. The
small methods were marked for inlining; the larger ones hidden.

[1] https://github.com/smeenai/bad-visibility-finder

Reviewers: mclow.lists, EricWF

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296732 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 03:22:18 +00:00
Shoaib Meenai
24e8dbdd2d [libc++] Make _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS export members
When building libc++ with hidden visibility, we want explicit template
instantiations to export members. This is consistent with existing
Windows behavior, and is necessary for clients to be able to link
against a hidden visibility built libc++ without running into lots of
missing symbols.

An unfortunate side effect, however, is that any template methods of a
class with an explicit instantiation will get default visibility when
instantiated, unless the methods are explicitly marked inline or hidden
visibility. This is not desirable for clients of libc++ headers who wish
to control their visibility, and led to PR30642.

Annotate all problematic methods with an explicit visibility specifier
to avoid this. The problematic methods were found by running
https://github.com/smeenai/bad-visibility-finder against the libc++
headers after making the _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS change. The
methods were marked with the new _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
macro, which was created for this purpose.

It should be noted that _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS was originally
intended to expand to default visibility, and was changed to expanding
to default type visibility to fix PR30642. The visibility macro
documentation was not updated accordingly, however, so this change makes
the macro consistent with its documentation again, while explicitly
fixing the methods which resulted in that PR.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296731 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 03:02:50 +00:00
Shoaib Meenai
4795f130eb [libc++] Mark some std::num_get method templates inline
D29157 will make explicit template instantiations expand to default
visibility, at which point these method templates will need to be
explicitly marked hidden visibility to avoid leaking into other DSOs.
Unfortunately, because of clang PR32114, they must be marked inline (in
conjunction with `-fvisibility-inlines-hidden`) to actually hide them,
since clang doesn't respect the hidden visibility annotation.

Since this involves an ABI change, mark these methods inline in a
separate change, so that the ABI changes can be reviewed separately and
verified to be safe.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296729 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 02:51:27 +00:00
Eric Fiselier
459bbcdd44 Remove more usages of REQUIRES-ANY in the test-suite
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296727 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 02:04:49 +00:00
Mehdi Amini
bd89190e69 Recommit r296712: "Fix Apple-specific XFAIL directive in libc++ test"
The test is passing with c++11 and c++14 but not c++1z on this
particular version of the compiler. Try to use lit boolean condition
to satisfy this constaint.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296725 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 02:01:11 +00:00
Mehdi Amini
c10e963f3d Revert "Fix Apple-specific XFAIL directive in libc++ test"
This reverts commit r296712. It broke our bot.

It turns out that the test is passing with c++11 and c++14 but
not c++1z on this particular version of the compiler. Since one
job is defaulting to c++1z and the other is testing all config I'm
not sure how to fix this...

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296724 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 01:57:40 +00:00
Eric Fiselier
a30d98b7ec Fix python 3 syntax error in sym_diff
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296716 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-02 00:03:01 +00:00
Mehdi Amini
5876a625ba Fix Apple-specific XFAIL directive in libc++ test
This tests is failing in XCode 7.0. But Xcode 7.3 that shipped
an updated clang has this test passing. This is fixing green dragon
which runs this configuration.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296712 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-01 23:45:03 +00:00
Mehdi Amini
d3acadce0c Fix Apple-specific XFAIL directive in libc++ test
These tests are failing in XCode 8.0, 8.1, and 8.2, but not in Xcode
8.3. Annoyingly the version numbering for clang does not follow Xcode
and is bumped to 8.1 only in Xcode 8.3. So Xfailing apple-clang-8.0
should catch all cases here.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296704 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-01 23:14:34 +00:00
Eric Fiselier
c57fb58f18 Generate the test configuration even when LIBCXX_INCLUDE_TESTS=OFF.
This patch changes the CMake configuration so that it always
generates the test/lit.site.cfg file, even when testing is disabled.

This allows users to test libc++ without requiring them to have
a full LLVM checkout on their machine.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296685 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-01 21:53:30 +00:00
Petr Hosek
29ed46b12e [libcxx] Support threads on Fuchsia
Differential Revision: https://reviews.llvm.org/D30278

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296573 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-01 03:09:18 +00:00
Eric Fiselier
0987c0c391 Mark test as unsupported in C++11
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296571 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-01 02:52:04 +00:00
Eric Fiselier
f9ddb9a217 Fix test failures due to bad test hasher
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296568 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-01 02:34:27 +00:00
Eric Fiselier
c6422362d5 Improve diagnostics when an invalid hash is used in an unordered container.
This patch adds a static assertion that the specified hash meets
the requirements of an enabled hash, and it ensures that the static
assertion is evaluated before __compressed_pair is instantiated.
That way the static assertion diagnostic is emitted first.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296565 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-01 02:02:28 +00:00
Eric Fiselier
67f7a78126 Fix PR32097 - is_abstract doesn't work on class templates.
This patch fixes llvm.org/PR32097 by using the __is_abstract
builtin type-trait instead of the previous library-only implementation.

All supported compilers provide this trait. I've tested as far
back as Clang 3.2, GCC 4.6 and MSVC trunk.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296561 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-01 01:27:14 +00:00
Michael Park
0268c19d72 Updated the XFAIL comment in variant tests.
Summary:
`ConstexprTestTypes::NoCtors` is an aggregate type (and consequently a literal type) in C++17,
but not in C++14 since it has a base class. This patch updates the comment to accurately describe the reason for the XFAIL.

Reviewers: EricWF

Reviewed By: EricWF

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296558 91177308-0d34-0410-b5e6-96231b3b80d8
2017-03-01 01:07:56 +00:00
Steven Wu
244033db8b Remove XFAIL in implicit_deduction_guides tests
The clang assertion causing these tests failing with sanitizer is fixed
in r295794. All the bots running libcxx tests should be upgraded and
running the compiler with the fix.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296385 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 21:10:41 +00:00
Asiri Rathnayake
3f017a82a2 Fix LIBCXX_HAS_EXTERNAL_THREAD_API builds. NFC.
Add the missing check in the __config header.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296351 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 16:10:57 +00:00
Asiri Rathnayake
62aeff93e9 Fix typo in error message. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296346 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 15:49:51 +00:00
Asiri Rathnayake
dec9851c7f Fix cmake dependency for the external-thread-library variant. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@296338 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 13:19:25 +00:00
Saleem Abdulrasool
e891cc8c09 Revert "threading_support: make __thread_sleep_for be alertable"
This reverts SVN r295329.  Although `__libcpp_thread_sleep_for` should
be alertable, the implementation causes a large regression in the test
suite.  Add a FIXME item there for now to get the test suite in a better
state before attempting to fix that behaviour.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295561 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-18 19:28:43 +00:00
Saleem Abdulrasool
7556597a12 test: silence warnings on clang under clang-cl
When running under clang-cl mode, we do not define `__GNUC__`, resulting
in the test failing.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295560 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-18 19:28:41 +00:00
Saleem Abdulrasool
1eab168286 math: add type promoting template definition on MSVCRT
When building with MSVCRT, we need to manually provide the type
promoting overloads to allow the correct type deduced invocation for
signbit(Int) and fpclassify(int).

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295559 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-18 19:28:38 +00:00
Saleem Abdulrasool
524f109550 test: explicitly size enumeration
On certain targets, enumerations may be smaller than an `unsigned long`.
Use an explicitly sized enumeration.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295558 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-18 19:28:36 +00:00
Saleem Abdulrasool
958d196f22 test: prevent incorrect quoting of paths
The path would previously get an extra leading space as the arguments
would be parsed when generating the final command to run.  Pretokenise
the arguments to permit proper quoting of the paths.  This avoids a
number of ignoring non-existent path warnings from clang.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295511 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 23:08:46 +00:00
Saleem Abdulrasool
29a8300460 math: fix typo in macro
MAJOR was misspelt as NAJOR.  Fix the spelling.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295510 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 23:08:44 +00:00
Saleem Abdulrasool
e72cf6de5a cmath: Use c99 math on a new enough msvcrt
MSVCRT 14+ supports the C99 math routines that we need.  Use them
accordingly.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295509 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 23:08:42 +00:00
Eric Fiselier
b7fd0be370 Update all bug URL's to point to https://bugs.llvm.org/...
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295434 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 08:37:03 +00:00
Eric Fiselier
ba5f008f88 Use inline namespaces with GCC instead of __attribute__((__strong__)).
GCC 7.0.1 started warning that __attribute__((__strong__)) is depricated.
This patch switches to using inline namespace with GCC instead. I believe
this wasn't done originally in order to support older GCC versions w/o
support for inline namespaces, or because earlier versions of GCC warned
users that the STL was using an inline namespace (even though it shouldn't affect users).

However I believe all of the above problems are gone for GCC 4.9 and greater.
Therefore switching to using inline namespaces instead of using __strong__
is the most correct behavior.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295428 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 07:31:38 +00:00
Eric Fiselier
8c9af4d299 Remove dead code in test
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295423 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 07:00:04 +00:00
Eric Fiselier
836ae8fa96 add implicit deduction guide tests for string_view
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295422 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 06:59:11 +00:00
Eric Fiselier
224dbbb3d6 Work around Clang assertion when testing C++17 deduction guides with '-g'.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295417 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 05:04:09 +00:00
Eric Fiselier
6ebcc5c9c4 Add doc for _LIBCPP_ENABLE_CXX17_DISABLED_AUTO_PTR and make it work under _LIBCPP_ENABLE_CXX17_REMOVED_FEATURES
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295407 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 03:30:25 +00:00
Eric Fiselier
515ba559b9 [libcxx] Remove unexpected handlers in C++17
Summary:
This patch implements [P0003R5](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0003r5.html) which removes exception specifications from C++17.

The only changes to the library are removing `set_unexpected`, `get_unexpected`, `unexpected`, and `unexpected_handler`. These functions can be re-enabled in C++17 using `_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS`.

@mclow.lists what do you think about removing stuff is this way?

Reviewers: mclow.lists

Reviewed By: mclow.lists

Subscribers: mclow.lists, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295406 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 03:25:08 +00:00
Eric Fiselier
f9aeac6b4e Mark a couple for basic_string member templates as inline. no ABI change this time.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295403 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 02:31:56 +00:00
Eric Fiselier
43ec7b868c update revision in CHANGELOG.TXT and fix python error
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295399 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 01:56:57 +00:00
Eric Fiselier
25380e401c Remove more basic_string member function templates from the dylib exports
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295398 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 01:53:16 +00:00
Eric Fiselier
0eaf2e8474 [libc++] Fix PR 31938 - std::basic_string constructors use non-deductible parameter types.
Summary:
This patch fixes http://llvm.org/PR31938. The description below is copy/pasted from the bug:

The standard says:

template<class charT, class traits = char_traits<charT>,
         class Allocator = allocator<charT>>
class basic_string {
  using value_type = typename traits::char_type;
  // ...
  basic_string(const charT* s, const Allocator& a = Allocator());
};

libc++ actually chooses to declare the constructor as

  basic_string(const value_type* s, const Allocator& a = Allocator());

The implicit deduction guides from class template argument deduction make what was previously an implementation detail visible:

std::basic_string s = "foo"; // error, can't deduce charT.

The constructor in question is in the libc++ DSO, but fortunately it looks like fixing this will not result in an ABI break.


@rsmith How does this look? I did more than just the constructors mentioned in the PR, but IDK how far to take it.


Reviewers: mclow.lists, rsmith

Reviewed By: rsmith

Subscribers: cfe-commits, rsmith

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295393 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 01:17:10 +00:00
Eric Fiselier
4203bfb5d3 add tests for ENAMETOOLONG
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@295390 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-17 01:00:37 +00:00