Commit Graph

295 Commits

Author SHA1 Message Date
Eric Fiselier
0d4bd61d78 Re-add mechanism to override LIT options using enviroment variables.
There was a dumb mistake in the original commit that has now
been fixed

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292351 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 07:56:57 +00:00
Eric Fiselier
3dcf50c4b2 Revert "Add mechanism to override LIT options using enviroment variables"
The buildbots currently depend on the old configuration. I'll recommit
once Zorg is fixed and reset

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292347 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 06:24:18 +00:00
Eric Fiselier
55c5f6be8d Add mechanism to override LIT options using enviroment variables
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292346 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 06:08:38 +00:00
Eric Fiselier
6fb6490957 Get more std::string _LIBCPP_DEBUG tests passing
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292342 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 05:34:42 +00:00
Eric Fiselier
44dbdb4b85 More configuration changes for running the test suite against MSVC's STL
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292337 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 03:57:38 +00:00
Eric Fiselier
6fbac40a30 Add support for running our test suite against MSVC's STL
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292326 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-18 01:48:54 +00:00
Eric Fiselier
bde2871b62 Improve CMake and LIT support for Windows
This patch contains multiple cleanups and fixes to better support building on
Windows.

* [Test] Fix handling of library runtime search paths by correctly adding them
  to the PATH variable when running the tests.

* [Test] Don't explicitly force "--target=i686-pc-windows" when running the
  test suite. Clang++ seems to deduce the correct target.

* [Test] Fix `.sh.cpp` tests on Windows by properly escaping flags used in
  shell commands. Specifically windows style paths which included spaces
  were causing these tests to fail.

* [CMake] Add "vcruntime" to the list of supported C++ ABI libraries in CMake, and
  teach the test suite how to handle it. For now libc++ defaults to using
  "vcruntime" on Windows except when libc++abi is in tree; That is probably
  a bug and should be changed to always use vcruntime, at least for now.

* [Misc] Move the "c++-build" include directory to the libc++ binary dir
  instead of the top level project dir and rename it "c++build". This is just
  misc cleanup. Libc++ shouldn't be creating internal build files and directories
  at the top-level projects root.

* [Misc] Build type_info's destructor when building for MSVC. This is a temporary
  work around to prevent link errors until we have a proper type_info
  implementation.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292157 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-16 20:47:35 +00:00
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
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
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
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
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
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
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
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
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
fb342388df Fix debug mode for vector/list and cleanup tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290657 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 06:06:09 +00:00
Eric Fiselier
47257c4a7d Add tests for unordered container tests and std::string
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290655 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 05:53:01 +00:00
Eric Fiselier
fa31c108f0 Fix build errors in C++03 caused by recent debug changes
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290653 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 05:26:56 +00:00
Eric Fiselier
01eb99ac7b Implement a throwing version of _LIBCPP_ASSERT.
This patch implements changes to allow _LIBCPP_ASSERT to throw on failure
instead of aborting. The main changes needed to do this are:

1. Change _LIBCPP_ASSERT to call a handler via a replacable function pointer
   instead of calling abort directly. Additionally this patch implements two
   handler functions, one which aborts and another that throws an exception.

2. Add _NOEXCEPT_DEBUG macro for disabling noexcept spec on function which
   contain _LIBCPP_ASSERT. This is required in order to prevent assertion
   failures throwing through a noexcept function. This macro has no effect
   unless _LIBCPP_DEBUG_USE_EXCEPTIONS is defined.

Having a non-aborting _LIBCPP_ASSERT is very important to allow sane testing of
debug mode. Currently we can only have one test case per file, since the test
case will cause the program to abort. Testing debug mode this way would require
thousands of test files, most of which would be 95% boiler plate. I don't think
this is a feasible strategy. Fortunately using a throwing debug handler solves
these issues.

Additionally this patch rewrites the documentation for debug mode.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290651 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 04:58:52 +00:00
Eric Fiselier
ab9ab94102 Enable -Wunreachable-code and fix duplicate warning flags
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290486 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 04:34:33 +00:00
Eric Fiselier
e32aed8014 Fix ASAN test failure
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290482 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 03:27:52 +00:00
Eric Fiselier
9d2fd1f556 Fix missed sign-compare warning
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290473 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 00:44:20 +00:00
Eric Fiselier
50f6579e74 fix sign comparison warnings
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290469 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 00:24:44 +00:00
Eric Fiselier
0e5ebbc77c Fix unused parameters and variables
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290459 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 23:37:52 +00:00
Eric Fiselier
0de917eac4 Update doc and various cleanup
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290446 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 20:00:13 +00:00
Eric Fiselier
59c5cb0116 Add test that _LIBCPP_VERSION matches __libcpp_version
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290445 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 19:38:43 +00:00
Eric Fiselier
20ace04348 Add apple-clang-8 to list of XFAILS for some variant tests. Patch from Michael Park
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290440 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 19:07:54 +00:00
Eric Fiselier
d8e3e932bf Actually re-disable -Wsign-compare
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289367 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 05:54:43 +00:00
Eric Fiselier
ab804f1b7d Re-disable -Wsign-compare for now. I didn't catch all occurrences
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289366 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 05:45:55 +00:00
Eric Fiselier
a2cd270943 Enable the -Wsign-compare warning to better support MSVC
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289363 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-11 05:31:00 +00:00
Eric Fiselier
11715ba8e2 Put C++ ABI headers in a special build directory instead of the top level.
This patch changes where the C++ ABI headers are put during the build. Previously
    they were put in the top level include directory (not the libc++ header directory).
    However that just polutes the top level directory. Instead this patch creates a special
    directory to put them in. The reason they can't be put under c++/v1 until after the build
    is because libc++ uses the in-source headers, so we can't add the include path of the libc++
    headers in the object dir.

    Additionally this patch teaches the test suite how to find the ABI headers,
    and adds a demangling utility to help debug tests with.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289195 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-09 09:31:01 +00:00
Eric Fiselier
f2f3637d40 Fix PR27374 - Remove the implicit reduced-arity-extension in tuple.
This patch removes libc++'s tuple extension which allowed it to be
constructed from fewer initializers than elements; with the remaining
elements being default constructed. However the implicit version of
this extension breaks conforming code. For example:

    int fun(std::string);
    int fun(std::tuple<std::string, int>);
    int x = fun("hello"); // ambigious

Because existing code may already depend on this extension it can be re-enabled
by defining _LIBCPP_ENABLE_TUPLE_IMPLICIT_REDUCED_ARITY_EXTENSION.

Note that the explicit version of this extension is still supported,
although it's somewhat less useful than the implicit one.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@289158 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 23:57:08 +00:00
Eric Fiselier
d95f62ecd2 Add support for writing -verify shell tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288743 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 01:02:15 +00:00
Eric Fiselier
c7011af19b Allow enabling/disabling testing with module using env LIBCXX_USE_MODULES=1
The Clang modules implementation breaks enough that libc++ needs an easy way
to enable/disable using modules on the Zorg builders. Editing Zorg itself
requires a buildmaster restart which only happens weekly. This patch
allows LIBCXX_USE_MODULES to be used to enable/disable the feature,
allowing the buildslave to disable it as need be.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288736 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 00:01:04 +00:00
Eric Fiselier
bca6de0e4e Adjust libc++ test infastructure to fully support modules
This patch overhalls the libc++ test format/configuration in order to fully support modules. By "fully support" I mean get almost all of the tests passing. The main hurdle for doing this is handling tests that `#define _LIBCPP_FOO` macros to test a different configuration. This patch deals with these tests in the following ways:

1. For tests that define single `_LIBCPP_ABI_FOO` macros have been annotated with `// MODULES_DEFINES: _LIBCPP_ABI_FOO`. This allows the test suite to define the macro on the command line so it uses a different set of modules.
2. Tests for libc++'s debug mode (which define custom `_LIBCPP_ASSERT`) are automatically detected by the test suite and are compiled and run with modules disabled.

This patch also cleans up how the `CXXCompiler` helper class handles enabling/disabling language features.

NOTE: This patch uses `LIT` features which were only committed to LLVM today. If this patch breaks running the libc++ tests you probably need to update LLVM.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@288728 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-05 23:16:07 +00:00