Commit Graph

1740 Commits

Author SHA1 Message Date
Jonathan Roelofs
9df08f027d Add an XFAIL for Newlib's missing fenv.h
llvm-svn: 224021
2014-12-11 15:37:22 +00:00
Eric Fiselier
f60e441080 Update information on where to find buildbots. Remove dead buildbot links.
llvm-svn: 223848
2014-12-09 22:53:21 +00:00
Marshall Clow
8ad78e905f Move the optional tests into test/experimental. They were put into test/utilities because optional was going to be part of C++14, and then was pulled and put into the Library Fundamentals TS instead. No funcitonality change here; just moving files around.
llvm-svn: 223778
2014-12-09 15:07:42 +00:00
Marshall Clow
e61fba3b70 Add all the relational operators to std::experimental::optional. Also update bad_optional_access to match the Library Fundamentals draft standard. This is not all of the upcoming changes to optional, though.
llvm-svn: 223775
2014-12-09 14:49:17 +00:00
Sergey Dmitrouk
4cc3a2d82c Explicitly include <sched.h> for sched_yield()
It might be implicitly included by <pthread.h> (and that's why it worked
so far), but it's not guaranteed (for example, this is not the case with
newlib).

llvm-svn: 223661
2014-12-08 14:50:21 +00:00
Eric Fiselier
9cfa8b762f Give lit.cfg's threading options default values when not defined.
llvm-svn: 223601
2014-12-07 08:52:19 +00:00
Eric Fiselier
0dc119be17 Mark a couple of tests as XFAIL with older compilers.
llvm-svn: 223600
2014-12-07 05:31:17 +00:00
Eric Fiselier
67945b6a44 Consolidate error reporting in lit.cfg
llvm-svn: 223599
2014-12-07 04:28:50 +00:00
Eric Fiselier
b967e3238e Revert parts of r223594. Use DYLD_LIBRARY_PATH on OSX when running tests.
llvm-svn: 223598
2014-12-07 00:34:23 +00:00
Eric Fiselier
9db4635146 Fix apple clang detection in lit.cfg
llvm-svn: 223597
2014-12-06 22:49:38 +00:00
Eric Fiselier
a1c73a6d6d Unify and cleanup rpath handling in tests.
llvm-svn: 223594
2014-12-06 22:08:51 +00:00
Eric Fiselier
b92da3f217 [libcxx] Add logic to probe compiler in tests.
Summary:
This patch probes the cxx compiler used during testing by getting it to dump its predefined macros. Based on the value of these macros the compiler name and compiler name + version are added to the available features.

There are three compiler names:
- `clang`
- `apple-clang`
- `gcc`.

The available features added are equivalent to:
- `'%s' % compiler_name`
- `'%s-%s.%s' % compiler_name, major_version, minor_version`

This information can be used to XFAIL tests on different compilers / versions.



Reviewers: mclow.lists, danalbert, jroelofs

Reviewed By: jroelofs

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D6399

llvm-svn: 223593
2014-12-06 21:13:15 +00:00
Eric Fiselier
b9f99739bc Add support for building and testing libc++ without threads to CMake.
Currently hacks must be used in to configure and build libc++ without threads
when using CMake. This patch adds CMake options to enable/disable building with
threads and a monotonic clock.

This patch also propagates the configuration information to lit so the tests
are properly configured as well.

llvm-svn: 223591
2014-12-06 21:02:58 +00:00
Eric Fiselier
2050bedf03 Improve error message when _LIBCPP_HAS_NO_MONOTONIC_CLOCK is used improperly
llvm-svn: 223590
2014-12-06 20:09:11 +00:00
JF Bastien
b1ba015b9f libc++: support NaCl when building thread.cpp
Summary: NaCl shouldn't include sysctl.h when trying to determine std:🧵:hardware_concurrency, it should instead use sysconf(_SC_NPROCESSORS_ONLN) through unistd.h. No test needs to be changed, since hardware_concurrency.pass.cpp already tests that std:🧵:hardware_concurrency > 0.

Test Plan: make check-libcxx

Reviewers: dschuff, danalbert

Subscribers: jfb, cfe-commits

Differential Revision: http://reviews.llvm.org/D6470

llvm-svn: 223128
2014-12-02 17:30:19 +00:00
JF Bastien
57148cbcbd libc++: add NaCl and PNaCl support for std::random_device
Summary:
The NaCl sandbox doesn't allow opening files under /dev, but it offers an API which provides the same capabilities. This is the same random device emulation that nacl_io performs for POSIX support, but nacl_io is an optional library so libc++ can't assume that device emulation will be performed. Note that NaCl only supports /dev/urandom, not /dev/random.

This patch also cleans up some of the preprocessor #endif, and fixes the test for Win32 (it accepts any token, and would therefore never throw regardless of the token provided).

Test Plan: ninja check-libcxx

Reviewers: dschuff, mclow.lists, danalbert

Subscribers: jfb, cfe-commits

Differential Revision: http://reviews.llvm.org/D6442

llvm-svn: 223068
2014-12-01 19:19:55 +00:00
JF Bastien
adec3407b8 libc++: integral types trap on PNaCl
Reviewers: dschuff, danalbert

    Subscribers: jfb, cfe-commits

    Differential Revision: http://reviews.llvm.org/D6411

llvm-svn: 222842
2014-11-26 17:51:58 +00:00
Eric Fiselier
53deb607d9 Fixes to get libc++ building on sun solaris. Patch from C Bergstrom.
llvm-svn: 222794
2014-11-25 21:57:41 +00:00
Eric Fiselier
e620b5eaa6 Use lit.util.executeCommand instead of our own version
llvm-svn: 222717
2014-11-25 03:03:32 +00:00
Eric Fiselier
cf82c1e904 Print lit configuration information after all configuration is done.
llvm-svn: 222711
2014-11-24 23:46:42 +00:00
Dan Albert
86b75a4057 Add better support for custom test runners.
Summary:
I finally got around to merging the many, many changes to lit.cfg into
Android's libc++. This patch makes it simpler to actually use a custom
configuration and test format.

First, I've factored out _build, _run, and _clean methods from
_execute_test, since these are the likely parts that will need to be
overridden. This is likely a first step in the work jroelofs has been
doing with improving cross-compiling test execution.

Second, I've added a `configuration_variant` to the config. This
entry, if present, is a string that forms the prefix of the class that
is to be used to configure the test runner. For example, Android sets
`config.configuration_variant = 'Android'`, and this causes an object
of type `AndroidConfiguration` to be constructed.

As an example of how this will be used, see:
https://android-review.googlesource.com/#/c/116022/

Reviewers: jroelofs, mclow.lists, EricWF

Reviewed By: EricWF

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D6373

llvm-svn: 222698
2014-11-24 22:24:06 +00:00
Eric Fiselier
a77ccfec24 Handle extra whitespace in linux distribution name.
llvm-svn: 222514
2014-11-21 08:54:35 +00:00
Eric Fiselier
5484151754 Mark some locale tests as XFAIL on debian and opensuse.
llvm-svn: 222513
2014-11-21 08:02:38 +00:00
Dan Albert
9ce6beaf07 Add more REQUIRES: LOCALE.* to tests.
llvm-svn: 222492
2014-11-21 01:23:04 +00:00
Eric Fiselier
d50a62e9e8 Remove xfail tag for darwin from quick_exit test
llvm-svn: 222406
2014-11-20 03:40:32 +00:00
Eric Fiselier
3b0a6ce96c Remove tests that va_copy is not defined when C++ < 11.
llvm-svn: 222405
2014-11-20 03:39:25 +00:00
Eric Fiselier
4fb4ab50fc Change contradictory wording in va_copy test error message.
llvm-svn: 222383
2014-11-19 20:01:26 +00:00
Marshall Clow
ad75510453 Implement N4280 - 'Non-member size() and more'
llvm-svn: 222378
2014-11-19 19:43:23 +00:00
Marshall Clow
e8584ca3ad Added entries for bugs 2118 and 2306, which were closed in Urbana
llvm-svn: 222361
2014-11-19 15:59:16 +00:00
Eric Fiselier
1eb8220aff Overhaul and separate nullptr_t tests to pass with C++03.
The standard requires that nullptr_t can be reinterpret_cast to an integral type
at least the size of nullptr_t. There is no way to emulate this conversion in
the C++03 nullptr_t implementation. The test for this conversion has been moved
to a new test and marked XFAIL with c++03.

This recommits what was originally r222296.

llvm-svn: 222318
2014-11-19 05:49:03 +00:00
Eric Fiselier
77c1ae8364 Revert r222296 to fix bad commit message
llvm-svn: 222316
2014-11-19 05:41:29 +00:00
Eric Fiselier
13d123ccf7 Cleanup quick_exit tests and get them passing in C++03.
Wrap the original test in _LIBCPP_HAS_QUICK_EXIT so it only runs when we have
quick_exit and add two new tests that check that when _LIBCPP_HAS_QUICK_EXIT
is not defined then no definition of std::at_quick_exit or std::quick_exit are
available.

llvm-svn: 222298
2014-11-19 01:45:12 +00:00
Eric Fiselier
a3857d336e diff --git a/test/language.support/support.types/nullptr_t.pass.cpp b/test/language.support/support.types/nullptr_t.pass.cpp
index 6c15fef..4d7c8b0 100644
--- a/test/language.support/support.types/nullptr_t.pass.cpp
+++ b/test/language.support/support.types/nullptr_t.pass.cpp
@@ -18,42 +18,62 @@ struct A
     A(std::nullptr_t) {}
 };
 
+template <class T>
+void test_conversions()
+{
+    {
+        T p = 0;
+        assert(p == nullptr);
+    }
+    {
+        T p = nullptr;
+        assert(p == nullptr);
+        assert(nullptr == p);
+        assert(!(p != nullptr));
+        assert(!(nullptr != p));
+    }
+}
+
+template <class T>
+void test_comparisons()
+{
+    T p = nullptr;
+    assert(p == nullptr);
+    assert(p <= nullptr);
+    assert(p >= nullptr);
+    assert(!(p != nullptr));
+    assert(!(p < nullptr));
+    assert(!(p > nullptr));
+    assert(nullptr == p);
+    assert(nullptr <= p);
+    assert(nullptr >= p);
+    assert(!(nullptr != p));
+    assert(!(nullptr < p));
+    assert(!(nullptr > p));
+}
+
+
 int main()
 {
     static_assert(sizeof(std::nullptr_t) == sizeof(void*),
                   "sizeof(std::nullptr_t) == sizeof(void*)");
-    A* p = 0;
-    assert(p == nullptr);
-    void (A::*pmf)() = 0;
-#ifdef __clang__
-    // GCC 4.2 can't handle this
-    assert(pmf == nullptr);
-#endif
-    int A::*pmd = 0;
-    assert(pmd == nullptr);
-    A a1(nullptr);
-    A a2(0);
-    bool b = nullptr;
-    assert(!b);
-    assert(nullptr == nullptr);
-    assert(nullptr <= nullptr);
-    assert(nullptr >= nullptr);
-    assert(!(nullptr != nullptr));
-    assert(!(nullptr < nullptr));
-    assert(!(nullptr > nullptr));
-    A* a = nullptr;
-    assert(a == nullptr);
-    assert(a <= nullptr);
-    assert(a >= nullptr);
-    assert(!(a != nullptr));
-    assert(!(a < nullptr));
-    assert(!(a > nullptr));
-    assert(nullptr == a);
-    assert(nullptr <= a);
-    assert(nullptr >= a);
-    assert(!(nullptr != a));
-    assert(!(nullptr < a));
-    assert(!(nullptr > a));
-    std::ptrdiff_t i = reinterpret_cast<std::ptrdiff_t>(nullptr);
-    assert(i == 0);
+
+    {
+        test_conversions<std::nullptr_t>();
+        test_conversions<void*>();
+        test_conversions<A*>();
+        test_conversions<void(*)()>();
+        test_conversions<void(A::*)()>();
+        test_conversions<int A::*>();
+    }
+    {
+        test_comparisons<std::nullptr_t>();
+        test_comparisons<void*>();
+        test_comparisons<A*>();
+        test_comparisons<void(*)()>();
+    }
+    {
+        bool b = nullptr;
+        assert(!b);
+    }
 }
diff --git a/test/language.support/support.types/nullptr_t_integral_cast.fail.cpp b/test/language.support/support.types/nullptr_t_integral_cast.fail.cpp
new file mode 100644
index 0000000..92bd879
--- /dev/null
+++ b/test/language.support/support.types/nullptr_t_integral_cast.fail.cpp
@@ -0,0 +1,17 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// typedef decltype(nullptr) nullptr_t;
+
+#include <cstddef>
+
+int main()
+{
+    std::ptrdiff_t i = static_cast<std::ptrdiff_t>(nullptr);
+}
diff --git a/test/language.support/support.types/nullptr_t_integral_cast.pass.cpp b/test/language.support/support.types/nullptr_t_integral_cast.pass.cpp
new file mode 100644
index 0000000..34c7a93
--- /dev/null
+++ b/test/language.support/support.types/nullptr_t_integral_cast.pass.cpp
@@ -0,0 +1,24 @@
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// NOTE: nullptr_t emulation cannot handle a reinterpret_cast to an
+// integral type
+// XFAIL: c++98, c++03
+
+// typedef decltype(nullptr) nullptr_t;
+
+
+#include <cstddef>
+#include <cassert>
+
+int main()
+{
+    std::ptrdiff_t i = reinterpret_cast<std::ptrdiff_t>(nullptr);
+    assert(i == 0);
+}

llvm-svn: 222296
2014-11-19 01:31:56 +00:00
Eric Fiselier
e15f86cb12 Modify tests to check that va_copy is only defined in C++11 and beyond.
llvm-svn: 222282
2014-11-18 23:46:18 +00:00
Eric Fiselier
a4884fdefd Flush out test cases for tuples constructor SFINAE
llvm-svn: 222278
2014-11-18 23:01:57 +00:00
Eric Fiselier
9b681f61b6 Add support for LLVM_USE_SANITIZER=Thread
llvm-svn: 222259
2014-11-18 21:26:45 +00:00
Marshall Clow
90ba6230a3 Marked LWG 2399 as complete. I committed a test for this earlier today.
llvm-svn: 222251
2014-11-18 20:37:47 +00:00
Marshall Clow
e1a075d5ce Add a test for LWG issue #2399. We already implement this, but now we have a test as well.
llvm-svn: 222242
2014-11-18 18:14:53 +00:00
Marshall Clow
f127a2d77f Update status of LWG issues 2340, 2396 and 2401. In all three cases, these are things that we already do.
llvm-svn: 222240
2014-11-18 17:35:16 +00:00
Marshall Clow
e9ad58a76e Since Eric poisoned the comma operator on all our test iterators, we no longer need 'comma_iterator'. Remove it from the test suite.
llvm-svn: 222238
2014-11-18 16:15:00 +00:00
Marshall Clow
e2c1750a2f Fix the tests I broke with the last commit. Sorry for the noise
llvm-svn: 222165
2014-11-17 19:16:57 +00:00
Marshall Clow
278ddec22c Implement LWG2400 - 'shared_ptr's get_deleter() should use addressof()', and add tests. Mark LWG2400 and LWG2404 as complete
llvm-svn: 222161
2014-11-17 19:05:50 +00:00
Marshall Clow
85a429a67a Reworked mismatch tests to count the number of comparisons, and make sure we are conforming with LWG2404. We are
llvm-svn: 222159
2014-11-17 18:52:25 +00:00
Marshall Clow
4bc58540c9 Fix a warning in the test; no functionality change
llvm-svn: 222143
2014-11-17 16:34:44 +00:00
Marshall Clow
3687d3c2e9 Implement void_t from N3911. Add a private version for use in the library before C++1z. Update the 1z status page, marking a bunch of issues that don't require library changes as complete (2129, 2212, 2230, 2233, 2325, 2365, 2376)
llvm-svn: 222138
2014-11-17 15:50:08 +00:00
Marshall Clow
5a8c46653f Add tests to ensure that reference_wrapper<T> is trivially copyable. This was added to C++1z with the adoption of N4277, but libc++ already implemented it as a conforming extension. No code changes were needed, just more tests.
llvm-svn: 222132
2014-11-17 15:04:46 +00:00
Eric Fiselier
382338d988 Fix build regression caused by not defining ABI library macros
llvm-svn: 222085
2014-11-15 17:25:23 +00:00
Eric Fiselier
5aedca96d5 [libcxx] Refactor CMakeLists.txt handling of compile and link flags to suppress warnings.
Summary:
Currently we have 5 variables that are used to specify options for building libcxx
1. `LIBCXX_CXX_FEATURE_FLAGS`
2. `LIBCXX_CXX_WARNING_FLAGS`
3. `LIBCXX_CXX_REQUIRED_FLAGS`
4. `compile_flags` (in libcxx/lib)
5. `link_flags` (in libcxx/lib)

The first three all get put into `CMAKE_CXX_FLAGS`. 
This changes the way flags are handled by only using 3 different options:

1. `LIBCXX_CXX_FLAGS` - general compile and link flags.
2. `LIBCXX_COMPILE_FLAGS` - compile only flags.
3. `LIBCXX_LINK_FLAGS` - link only flags.

This patch also removes the warning about `-nostdinc++` being unused during linking.



Reviewers: mclow.lists, danalbert

Reviewed By: danalbert

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D6277

llvm-svn: 222080
2014-11-15 06:26:30 +00:00
Eric Fiselier
3fe611e508 Split thread test into two parts. Mark one as XFAIL with ASAN.
The second part of the test checks that std::terminate is called when a running
thread is move assigned to. Calling std::terminate prevents some of the destructors
to be called and ASAN fires on this.

llvm-svn: 222076
2014-11-15 01:58:45 +00:00
Eric Fiselier
d6bd7bf6ba Initialize pointer in string conversion helpers to prevent MSAN diagnostic.
Since the initialization of the pointer happens across the libc library boundry
MSAN will not know the pointer was initialized. This fixes MSAN failures in
test/strings/string.conversions.

llvm-svn: 222052
2014-11-14 22:23:57 +00:00
Eric Fiselier
0425c7c726 add debug info when compiling sanitizer tests
llvm-svn: 222051
2014-11-14 22:18:03 +00:00
Eric Fiselier
71380b8391 Add -gline-tables-only when compiling w/ sanitizers in RELEASE
llvm-svn: 222035
2014-11-14 20:38:07 +00:00
Eric Fiselier
93f65c4d08 [libcxx] Fix memory leak in strstream tests.
Summary: The strstream function `str()` sets `freeze(true)`. When `freeze` is true the destructor is not allowed to free any dynamically allocated memory. The memory leak causes ASAN to fail on these tests. To ensure memory is deallocated `strstream.freeze(false)` is called at the end of the tests.

Reviewers: danalbert, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D6261

llvm-svn: 222025
2014-11-14 19:10:43 +00:00
Eric Fiselier
b9987293e6 [libcxx] Fix vector annotator size increase in vector::insert(pos, count, value)
Summary:
The size of the vector is being increased by `__n` during the call to `__move_range` and not by 1.
This fixes a test failure in `containers/sequences/vector/vector.modifiers/insert_iter_size_value.pass.cpp` when using ASAN.

Reviewers: danalbert, kcc, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D6264

llvm-svn: 222014
2014-11-14 18:28:36 +00:00
Eric Fiselier
950a166710 Split string capacity test into two parts and mark one part as UNSUPPORTED when using sanitizers.
The test is split such that:
- max_size.pass.cpp tests that string::resize() fails to allocator for max_size
  and max_size -1
- over_max_size.pass.cpp tests that string::resize() throws a length error for
  max_size + 1

The test was split into two because max_size.pass.cpp cannot pass with 
sanitizers but over_max_size.pass.cpp can.

llvm-svn: 221969
2014-11-14 03:16:12 +00:00
Eric Fiselier
eb2378b70c Mark more tests as UNSUPPORTED with ASAN and MSAN.
These tests fail for 2 reasons when using ASAN and MSAN.
1. If allocator_may_return_null=0 they will fail because null is returned
   or an exception is thrown.
2. When allocator_may_return_null=1 the new_handler is still not called. This
   results in an assertion failures.

llvm-svn: 221967
2014-11-14 02:55:16 +00:00
Eric Fiselier
b941b50b16 Setup llvm-symbolizer when running the tests with sanitizers
llvm-svn: 221966
2014-11-14 02:47:08 +00:00
Eric Fiselier
bc2d632964 Add -O3 when testing with UBSAN. This triggers far undefined behaviour
llvm-svn: 221964
2014-11-14 02:07:52 +00:00
Eric Fiselier
a0c1b09c6a Mark more locale tests as unsupported with ASAN and MSAN
llvm-svn: 221937
2014-11-13 22:45:23 +00:00
Marshall Clow
eb63c5e28c Replaced checking in string_view::remove_suffix/remove_prefix by _LIBCPP_ASSERT, since this is technically undefined behavior. Fixes PR#21496
llvm-svn: 221717
2014-11-11 22:07:10 +00:00
Marshall Clow
981f31ac51 Fix typo in allocator_traits::construct. This fixes PR14175, which shows up if an allocator has a no-args construct method
llvm-svn: 221697
2014-11-11 19:22:33 +00:00
Marshall Clow
f1ce9c177f Fixed a typo in a paper name: 4190 --> N4190
llvm-svn: 221690
2014-11-11 16:45:50 +00:00
Marshall Clow
862af58793 Added vector<T>::insert tests suggested by code coverage results
llvm-svn: 221689
2014-11-11 16:44:05 +00:00
Marshall Clow
a773ab1d8d EricQWF's code coverage work showed that none of the libc++ tests were exercising some code in vector<bool>. Add more tests in an attempt to get better coverage
llvm-svn: 221644
2014-11-11 00:16:30 +00:00
Marshall Clow
68640684e8 Update status pages for C++1z
llvm-svn: 221601
2014-11-10 15:43:20 +00:00
Eric Fiselier
d4bc0bf3a3 Fix rvalue bug in __has_operator_addressof
llvm-svn: 221398
2014-11-05 21:20:10 +00:00
Eric Fiselier
c7e48bec0e Fix operator & detection trait to check for free function overloads as well
llvm-svn: 221395
2014-11-05 20:59:18 +00:00
Eric Fiselier
193bd50fe4 Mark another test as UNSUPPORTED with ASAN and MSAN
llvm-svn: 221275
2014-11-04 17:03:47 +00:00
Eric Fiselier
652a3f3257 Actually mark the tests an unsupported with MSAN (not just ASAN)
llvm-svn: 221240
2014-11-04 05:36:15 +00:00
Eric Fiselier
446e4b6be1 Mark tests that replace operator new/delete as UNSUPPORTED with ASAN and MSAN.
tests that replace operator new/delete won't link when using ASAN and MSAN 
because these sanitizers also replace new/delete.

llvm-svn: 221236
2014-11-04 05:11:41 +00:00
Eric Fiselier
49c541a754 Add test for type properties of std::reference_wrapper
llvm-svn: 221224
2014-11-04 01:54:44 +00:00
Marshall Clow
8ba95b7b4d Mark string_view::to_string as const. Fixes PR21428
llvm-svn: 221101
2014-11-02 15:35:32 +00:00
Eric Fiselier
22b131ffdd Partial fix for building w/ libcxxrt on OSX. Patch from C Bergstrom.
llvm-svn: 221029
2014-11-01 00:41:42 +00:00
Eric Fiselier
1d558b84ef libcxxrt defines bad_array_new_length::what() so move that into a conditional compilation block
llvm-svn: 221025
2014-11-01 00:11:25 +00:00
Eric Fiselier
fd465fe5b5 libcxxrt now implements bad_array_new_length and need to gaurd against multiple defines. Patch from Baptiste Daroussin.
llvm-svn: 220882
2014-10-29 23:14:53 +00:00
Eric Fiselier
d6b46b46b6 Fix example in documentation of target triple sanitization.
llvm-svn: 220804
2014-10-28 18:03:38 +00:00
Eric Fiselier
295bce1130 [libcxx] Delay evaluation of __make_tuple_types to prevent blowing the max template instantiation depth. Fixes Bug #18345
Summary:
http://llvm.org/bugs/show_bug.cgi?id=18345

Tuple's constructor and assignment operators for "tuple-like" types evaluates __make_tuple_types unnecessarily. In the case of a large array this can blow the template instantiation depth.

Ex:
```
#include <array>
#include <tuple>
#include <memory>
 
typedef std::array<int, 1256> array_t;
typedef std::tuple<array_t> tuple_t;

int main() {
  array_t a;
  tuple_t t(a); // broken
  t = a; // broken

  // make_shared uses tuple behind the scenes. This bug breaks this code.
  std::make_shared<array_t>(a);
}
```

To prevent this from happening we delay the instantiation of `__make_tuple_types` until after we perform the length check. Currently `__make_tuple_types` is instantiated at the same time that the length check .


Test Plan: Two tests have been added. One for the "tuple-like" constructors and another for the "tuple-like" assignment operator. 

Reviewers: mclow.lists, EricWF

Reviewed By: EricWF

Subscribers: K-ballo, cfe-commits

Differential Revision: http://reviews.llvm.org/D4467

llvm-svn: 220769
2014-10-28 06:31:22 +00:00
Jonathan Roelofs
33c2c02e25 Test that the single-threaded lit feature is available iff the corresponding guard is #defined
http://reviews.llvm.org/D6006

llvm-svn: 220729
2014-10-27 22:39:19 +00:00
Eric Fiselier
bb19141779 Add special case handling of linux target triples that do not contain -gnu.
For targets that end it `redhat-linux` and `suse-linux` manually add the `-gnu`
section of the target since `linux-gnu` is needed in the testsuite.

This patch also moves the removal of minor and patchlevel numbers from OSX
triples to be handled when deducing the triple instead of when adding available
features.

llvm-svn: 220724
2014-10-27 22:14:25 +00:00
Eric Fiselier
b2a6048b18 Add test to ensure including <atomic> fails when _LIBCPP_HAS_NO_THREADS is defined.
llvm-svn: 220722
2014-10-27 21:38:23 +00:00
Eric Fiselier
b494e5d198 [libcxx] use clang's __char16_t and __char32_t definitions on Linux in C++03 mode.
Summary: This fixes ODR violations in C++03 mode in test/localization/locale.stdcvt. The special case for linux was introduced in 2010 before clang always defined __char16_t and __char32_t.

Reviewers: mclow.lists, danalbert, jroelofs, EricWF

Reviewed By: EricWF

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D5930

llvm-svn: 220716
2014-10-27 20:29:05 +00:00
Eric Fiselier
847ee13171 Fix use of operator comma in is_permutation and delete comma operator for test iterators.
The comma operators in the test iterators give better error messages when they
are deleted as opposed to not defined. Delete these functions when possible.

llvm-svn: 220715
2014-10-27 20:26:25 +00:00
Eric Fiselier
aae76493f0 [libcxx] Remove use of uniform initialization from regex tests so that they compile in C++03.
Reviewers: danalbert, jroelofs, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D5957

llvm-svn: 220707
2014-10-27 19:29:32 +00:00
Eric Fiselier
910285b238 [libcxx] Fix use of operator comma where the types can be user defined
Summary:
An evil user might overload operator comma. Use a void cast to make sure any user overload is not selected.
Modify all the test iterators to define operator comma. 

Reviewers: danalbert, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D5929

llvm-svn: 220706
2014-10-27 19:28:20 +00:00
Marshall Clow
a5027324ec PR #21321 talked about implementation-defined behavior of realloc. I poo-poohed it, and was wrong. Fix the call in <locale>. Review the others, refactored some duplicated code, and found overflow bugs (and __event_cap_ was never getting updated, either).
llvm-svn: 220702
2014-10-27 19:08:10 +00:00
Marshall Clow
aedfb87089 Change the comment on the closing #endif to match the condition on the corresponding #ifdef. Thanks to K-ballo for the catch. No functionality change.
llvm-svn: 220647
2014-10-26 20:29:38 +00:00
Eric Fiselier
460b224ef9 Change uses of sys.platform == 'linux2' to sys.platform.startswith('linux')
Although the current method is valid up till python 3.3 (which is not supported)
this seems to be a clearer way of checking for linux and moves the tests towards
python 3 compatibility.

llvm-svn: 220534
2014-10-23 22:57:56 +00:00
Eric Fiselier
e608aed22b [libcxx] XFAIL all currently failing libc++ tests for linux.
Summary:
Pretty please? We now have a significant number of builders that test libc++. I really want those builders to be green.
Most of these failures are due to differences in locale data, including those in regex. I will continue working on fixing the locale and regex tests but there is no consensus on what the correct direction to go. 

Since the builders display a list of XFAIL tests they are by no means hidden. It just means they are expected failures. Now unexpected failures won't get mixed in with well known and expected failures.

Reviewers: mclow.lists, jroelofs, danalbert

Reviewed By: danalbert

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D5941

llvm-svn: 220512
2014-10-23 21:17:36 +00:00
Eric Fiselier
dfbb5cddb4 Only link tests against -ldl on linux
llvm-svn: 220510
2014-10-23 20:45:37 +00:00
Justin Bogner
acb64e8875 Make headers available in the build directory
This essentially re-does r194825 and makes it possible to run clang
with libc++ without having to install it, even if you don't have any
version of libc++ installed in /usr/.

This behaviour broke in r210577/r211629, which fixed pr18681.

llvm-svn: 220489
2014-10-23 16:51:12 +00:00
Eric Fiselier
83fb578e4e Add support for "fancy" pointers to promise and packaged_task.
Summary:
This patch is very closely related to D4859. Please see http://reviews.llvm.org/D4859 for more information.

This patch adds support for "fancy" pointers and allocators to promise and packaged_task. The changes made to support this are exactly the same as in D4859.



Test Plan: "fancy" pointer tests were added to each constructor affected by the change.

Reviewers: danalbert, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D4862

llvm-svn: 220471
2014-10-23 06:24:45 +00:00
Eric Fiselier
319be72220 Add support for "fancy" pointers to shared_ptr. Fixes PR20616
Summary:
This patch add support for "fancy pointers/allocators" as well as fixing support for shared_pointer and "minimal" allocators.

Fancy pointers are class types that meet the NullablePointer requirements. In our case they are created by fancy allocators. `support/min_allocator.h` is an archetype for these types.

There are three types of changes made in this patch:
1. `_Alloc::template rebind<T>::other` -> `__allocator_traits_rebind<_Alloc, T>::type`. This change was made because allocators don't need a rebind template. `__allocator_traits_rebind` is used instead of `allocator_traits::rebind` because use of `allocator_traits::rebind` requires a workaround for when template aliases are unavailable.
2. `a.deallocate(this, 1)` -> `a.deallocate(pointer_traits<self>::pointer_to(*this), 1)`. This change change is made because fancy pointers aren't always constructible from raw pointers. 
3. `p.get()` -> `addressof(*p.get())`. Fancy pointers aren't actually a pointer. When we need a "real" pointer we take the address of dereferencing the fancy pointer. This should give us the actual raw pointer.

Test Plan: Tests were added using `support/min_allocator.h` to each affected shared_ptr overload and creation function. These tests can only be executed in C++11 or greater since min_allocator is only available then. A extra test was added for the non-variadic versions of allocate_shared. 

Reviewers: danalbert, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D4859

llvm-svn: 220469
2014-10-23 04:12:28 +00:00
Marshall Clow
3d541d12ed Fix a couple of failing tests for C++03 by checking for rvalue reference support first.
llvm-svn: 220465
2014-10-23 03:57:52 +00:00
Eric Fiselier
062e6ee121 Add -ldl to libc++ tests when sanitizers are used.
Clang 3.6 no longer links the sanitizer runtime library dependancies when
-nodefaultlibs is used. This patch manually links in a missing dependancy.

llvm-svn: 220463
2014-10-23 02:54:15 +00:00
Marshall Clow
79e23cb972 Some tests used __typeof__ instead of decltype. Replace these usages.
llvm-svn: 220296
2014-10-21 15:07:09 +00:00
Marshall Clow
450d430f55 LWG #2212 (not yet adopted) mandates that tuple_size/tuple_element are available if <array> or <utility> are included (not just <tuple>). We already do this. Add some tests to make sure that this remains true.
llvm-svn: 220295
2014-10-21 15:05:31 +00:00
Eric Fiselier
d5a55037e1 Remove dead buildbot link
llvm-svn: 220260
2014-10-21 02:46:31 +00:00
Eric Fiselier
a63c149ceb [libcxx] Redo adding support for building and testing with an ABI library not along linker paths
Summary:
This is the second attempt at allowing for the use of libraries that the linker cannot find. The first attempt used `CMAKE_LIBRARY_PATH` and `find_library` to select which ABI library should be used. There were a number of problems with this approach:

- `find_library` didn't work with cmake targets (ie in-tree libcxxabi build)
- It wasn't always possible to determine where `find_library` actually found your library.
- `target_link_libraries` inserted the path of the ABI library into libc++'s RPATH when `find_library` was used.
- Linking libc++ and it's ABI library is a special case. It's a lot easier to keep it simple. 

After discussion with @cbergstrum a new approach was decided upon.
This patch achieve the same ends by simply using `LIBCXX_CXX_ABI_LIBRARY_PATH` to specify where to find the library (if the linker won't find it). When this variable is defined it is simply added as a library search path when linking libc++. It is a lot easier to duplicate this behavior in LIT. It also prevents libc++ from being linked with an RPATH.






Reviewers: mclow.lists, cbergstrom, chandlerc, danalbert

Reviewed By: chandlerc, danalbert

Subscribers: chandlerc, cfe-commits

Differential Revision: http://reviews.llvm.org/D5860

llvm-svn: 220157
2014-10-19 00:42:41 +00:00
Eric Fiselier
ac97f7ce7c Fix unused variables in tests to placate scan-build. Patch from Steve MacKenzie.
llvm-svn: 220154
2014-10-19 00:10:15 +00:00
Marshall Clow
c8528b5001 Whitespace maintenance. Remove a bunch of tabs that snuck in. No functionality change
llvm-svn: 220142
2014-10-18 11:03:33 +00:00