Commit Graph

1895 Commits

Author SHA1 Message Date
Jonathan Roelofs b9d33419fb Fix a lit configuration diagnostic. NFC
llvm-svn: 225985
2015-01-14 14:48:27 +00:00
Jonathan Roelofs 9144235617 Refactor the lit config's linker flag discovery code. NFC
llvm-svn: 225920
2015-01-14 01:29:04 +00:00
Marshall Clow 9db9069cf3 Make regex::assign not clobber the regex in case of failure. Fixes PR#22213
llvm-svn: 225799
2015-01-13 16:49:52 +00:00
Eric Fiselier 4fc4864bbd Fix vexing parse in test.
llvm-svn: 225633
2015-01-12 15:56:41 +00:00
Marshall Clow 612c2c7469 One more #include request in the test suite from Walter Brown
llvm-svn: 225609
2015-01-11 18:07:06 +00:00
Marshall Clow 9317900590 Change a couple more template parameter names from 'T' to '_Tp', etc. Thanks to Ondřej Majerech for the patch, but I did a bit more.
llvm-svn: 225598
2015-01-11 06:15:59 +00:00
Jonathan Roelofs cba3e4ca21 Support Newlib as libc++'s C library [cstdio part, part 2]
Wrappers for clearerr, feof, ferror (which newlib implements as macros).

http://reviews.llvm.org/D5420

llvm-svn: 225563
2015-01-10 00:08:00 +00:00
Marshall Clow e21582e742 Walter Brown sent a list of tests which needed 'additional includes' to match what was in the standard. Added these includes to the tests. No changes to the library or test results.
llvm-svn: 225541
2015-01-09 20:25:52 +00:00
Dan Albert 2bcfc6f95e [libc++] Refactor test components into modules.
Summary:
I've moved the bulk of `lit.cfg` into `test/libcxx/testconfig.py` and
`test/libcxx/testformat.py`. All that remains in `lit.cfg` is the
logic to discover lit.site.cfg if lit.cfg was run directly, and the
logic for loading configuration variants.

The configuration variant flow has changed with this patch. Rather
than instantiating an object of type `<VARIANT>Configuration`, we now
instatiate an object of type `Configuration` that was loaded from the
module `<VARIANT>.testconfig.py`.

This has to be done on a per-project basis rather than in LIT itself
because LIT doesn't actually know where the real test directory is,
only where the site configuration is (which is usually in the output
directory). It's simple enough to do though, so it's fine to require
each project to do it themselves.

I also cleaned up all the pylint issues while I was here, which was
mostly just a matter of fixing long lines.

Reviewers: mclow.lists, jroelofs, EricWF

Reviewed By: EricWF

Subscribers: cfe-commits

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

llvm-svn: 225532
2015-01-09 18:03:29 +00:00
Marshall Clow 3e33d11b06 K-Ballo found a place where we were using 'V' as a template parameter. Replace with '_Vp' for protection against user-defined macros.
llvm-svn: 225527
2015-01-09 17:03:36 +00:00
Marshall Clow a257ab0803 In early C++11 standard drafts, std::function derived from std::unary_function or std::binary_function if there was only one (or two) parameters. Before C++11 shipped, this restiction was lifted, but libc++ still does this (which is fine). However, the tests still check for this outdated requiremnt. Change then to check for the nested typedefs instead (which are still required by the standard). No change to the library.
llvm-svn: 225430
2015-01-08 06:36:41 +00:00
Marshall Clow c51d3ecb98 Add checks to make sure the hash functor has the right typedefs
llvm-svn: 225429
2015-01-08 06:18:59 +00:00
Marshall Clow 6855c93ce9 Missed a typename
llvm-svn: 225408
2015-01-07 22:26:48 +00:00
Marshall Clow d95510ebba libc++ implements its' hash objects as deriving from std::unary_function, and the tests test for that. STL @ MS pointed out that the standard doesn't requie these objects to derive from unary_function, and so the tests should not require that either. Change the tests to check for the embedded typedefs - which ARE required. No change to the library.
llvm-svn: 225403
2015-01-07 21:53:23 +00:00
Marshall Clow 601fa8d824 In C++03, a bunch of the arithmetic/logical/comparison functors (such as negate/bit_not.pass/logical_not) were defined as deriving from unary_funtion. That restriction was removed in C++11, but the tests still check for this. Change the test to look for the embedded types first_argument/second_argument/result_type. No change to the library, just more standards-compliant tests. Thanks to STL @ Microsoft for the suggestion.
llvm-svn: 225402
2015-01-07 21:51:30 +00:00
Marshall Clow 842b4aecf8 Add tests to check the typedefs from the result of std::owner_less
llvm-svn: 225381
2015-01-07 20:54:51 +00:00
Marshall Clow 9570e7b04a Missed one comparison test in r225375
llvm-svn: 225376
2015-01-07 20:40:28 +00:00
Marshall Clow 66369c03a3 In C++03, a bunch of the arithmetic/logical/comparison functors (such as add/equal_to/logical_or) were defined as deriving from binary_funtion. That restriction was removed in C++11, but the tests still check for this. Change the test to look for the embedded types first_argument/second_argument/result_type. No change to the library, just more standards-compliant tests. Thanks to STL @ Microsoft for the suggestion.
llvm-svn: 225375
2015-01-07 20:31:06 +00:00
Dan Albert d5c19bb16d Move a test to the new tests directory.
I had written the patch that added this test before the tests were
moved into tests/std, so the test ended up in the wrong directory.

llvm-svn: 225300
2015-01-06 22:18:27 +00:00
Dan Albert 23f19e9ac4 Make a test UNSUPPORTED if libcpp-has-no-threads.
llvm-svn: 225287
2015-01-06 19:32:30 +00:00
Dan Albert 658ed010a6 Appease MSAN buildbots.
This is just a compile time test, but we have MSAN buildbots that will
fail since `exp` was uninitialized.

llvm-svn: 225286
2015-01-06 19:23:25 +00:00
Marshall Clow d632356aa3 Fix PR 22106; make std::swap work for multi-dimensional arrays. Thanks to Peter Griess for the report and suggested fix
llvm-svn: 225285
2015-01-06 19:20:49 +00:00
Dan Albert 872bad5ab7 Obey [atomics.types.operations.req]/21 for GCC.
Summary:
Excerpt from [atomics.types.operations.req]/21:

> When only one memory_order argument is supplied, the value of
> success is order, and the value of failure is order except that a
> value of memory_order_acq_rel shall be replaced by the value
> memory_order_acquire and a value of memory_order_release shall be
> replaced by the value memory_order_relaxed.

Clean up some copy pasta while I'm here (someone added a return
statement to a void function).

Reviewers: EricWF, jroelofs, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 225280
2015-01-06 18:39:37 +00:00
Dan Albert a76dfbd428 [libcxx] Set _LIBCPP_ELAST for mingw.
Reviewers: K-ballo, mclow.lists, EricWF

Reviewed By: EricWF

Subscribers: jfb, jroelofs, majnemer, cfe-commits

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

llvm-svn: 225273
2015-01-06 17:34:51 +00:00
Chandler Carruth 64be05a873 [cmake/multilib] Teach libc++'s CMake build to support multilib libdir
suffixes like 'lib64' or 'lib32'.

This support is currently very rhudimentary. We define a variable
LIBCXX_LIBDIR_SUFFIX. In a standalone build of libc++ this can be
directly set as a cached variable to control the multilib suffix used.
When building libc++ within a larger LLVM build, it is hard wired to
whatever LLVM libdir suffix has been selected. If this doesn't work for
someone, just let me know. I'm happy to change it.

This is essentially new functionality for libc++ so I don't expect it to
have any impact for folks until they start setting these variables.
However, I know libc++ is built in a diverse set of environments so just
let me know if this causes you any problems.

llvm-svn: 224926
2014-12-29 12:15:47 +00:00
Eric Fiselier 279663c1b4 Prevent ill-formed instantiation of __invoke_of<...> during the evaluation of a bind expression. Fixes PR22003.
The SFINAE on the function __mu(Fn, Args...) that evaluates nested bind
expressions always tries to deduce the return type for Fn(Args...) even when Fn
is not a nested bind expression. This can cause hard compile errors when the
instantation of Fn(Args...) is ill-formed. This patch prevents the instantation
of __invoke_of<Fn, Args...> unless Fn is actually a bind expression.

Bug reportand patch from Michel Morin.

http://llvm.org/bugs/show_bug.cgi?id=22003

llvm-svn: 224753
2014-12-23 05:54:34 +00:00
Marshall Clow 09ac1efe14 Remove non-const test to get test passing. Will come back later and (correctly) add non-const tests
llvm-svn: 224748
2014-12-23 01:30:39 +00:00
Eric Fiselier 2cbc654d93 [libcxx] Consolidate new/delete replacement in tests and disable it when using sanitizers.
Summary:
MSAN and ASAN also replace new/delete which leads to a link error in these tests. Currently they are unsupported but I think it would be useful if these tests could run with sanitizers.

This patch creates a support header that consolidates the new/delete replacement functionality and checking.
When we are using sanitizers new and delete are no longer replaced and the checks always return true.

Reviewers: mclow.lists, danalbert, jroelofs, EricWF

Reviewed By: EricWF

Subscribers: cfe-commits

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

llvm-svn: 224741
2014-12-22 22:38:59 +00:00
Eric Fiselier 19c07165d1 [libcxx] Add numerous options to libc++ LIT test suite configuration.
Summary:
In order to fully replace the testit script we need to update LIT so it provides the same functionality.
This patch adds a number of different configuration options to LIT to do that. It also adds documentation for all of the command line parameters that LIT supports.

Generic options added:
- `libcxx_headers`
- `libcxx_library`
- `compile_flags`


Generic options modified:
- `link_flags`: Changed from overriding the default args to adding extra args instead (to match compile flags)
- `use_sanitizer`: Renamed from `llvm_use_sanitizer`


Please see the added documentation for more information about the switches. As for the actual documentation I'm not sure if it should be kept in libc++ forever since it adds an undue maintenance burden, but I think it should be added for the time being while the changes are new. I'm verify unskilled with HTML so if the documentation needs any changes please let me know.

Hopefully this will kill testit.



Reviewers: jroelofs, mclow.lists, danalbert

Reviewed By: danalbert

Subscribers: alexfh, cfe-commits

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

llvm-svn: 224728
2014-12-22 20:49:45 +00:00
Marshall Clow 08de4b0d4e Fix PR22000. __bit_iterator::move_backwards. Also make a note that __bit_iterator
is quite underrepresented in the libc++ tests suite.

llvm-svn: 224723
2014-12-22 19:10:11 +00:00
Eric Fiselier e75e0b4095 Move unconditional test compile and link flags into their configuration functions.
llvm-svn: 224674
2014-12-20 04:14:14 +00:00
Eric Fiselier a78a26783e [libcxx] Teach libcxx's lit configuration new ways to find lit.site.cfg
Summary:
Currently to run tests in tree you need to symlink the lit.site.cfg file generated by the cmake build into the source tree, and teach your VCS to ignore it.

This allows the user to specify where to find the lit.site.cfg file two different ways:
* lit_site_config lit parameter
* LIT_SITE_CONFIG enviroment variable. 

example usage:
```
lit -sv --param=libcxx_site_config=path/to/libcxx-build/test/lit.site.cfg path/to/tests
```
Or
```
export LIBCXX_SITE_CONFIG=path/to/libcxx-build/test/lit.site.cfg
lit -sv path/to/tests
```
The command line parameter will override the environment variable. 
If neither options are present a warning is issued and the `lit.cfg` file is loaded directly. 


Reviewers: mclow.lists, jroelofs, danalbert

Reviewed By: danalbert

Subscribers: ddunbar, cfe-commits

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

llvm-svn: 224671
2014-12-20 03:16:55 +00:00
Eric Fiselier 5a83710e37 Move test into test/std subdirectory.
llvm-svn: 224658
2014-12-20 01:40:03 +00:00
Eric Fiselier 5459af15f9 [libcxx] Add <experimental/type_traits> for LFTS
Summary:
This adds the <experimental/type_traits> (minus invocation traits). Mostly just the `_v` traits.


Reviewers: K-ballo, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 224626
2014-12-19 22:21:44 +00:00
Eric Fiselier 7d8372ea02 Remove unneeded configuration code.
llvm-svn: 224618
2014-12-19 21:42:17 +00:00
Eric Fiselier 469a4f90bb [libcxx] Allow the use of ccache when running the test suite.
Summary:
In order to get the bots running quicker I would like to be able to use ccache 
with the test suite. This patch adds support for running the test suite using 
ccache. To use ccache pass `--param=use_ccache=true` when running the test suite.

ccache will not cache any command that invokes ld, so the build step needs to be
split into two separate compile commands. The cost of splitting the build step
into two parts when not using ccache seems to be minimal. On my machine I saw a
difference of ~5 seconds on a 5 minute test suite run.

A full test suite run with ccache generates about 250MB of cached data.

I recorded the following times for running the test suite in the following configurations:
- no ccache: 340s
- initial ccache run: 380s
- rerun with ccache (no changes): 53s.
- rerun with ccache (<string> changed): 80s
- rerun with ccache (<cmath> changed): 169s
- rerun with ccache (<valarray> changed): 69s





Reviewers: mclow.lists, jroelofs, danalbert

Reviewed By: jroelofs

Subscribers: cfe-commits

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

llvm-svn: 224603
2014-12-19 19:27:32 +00:00
Marshall Clow d60fe11919 Re-commit the test for regex that I busted last night - now passes under ASAN
llvm-svn: 224342
2014-12-16 16:22:43 +00:00
Justin Bogner 1e8019f5b9 Revert "Fix installheaders target's permissions"
The install of headers excludes the support directory, so these chmod
calls fail on non-existent directories, as seen on this bot:

http://lab.llvm.org:8080/green/job/clang-stage1-configure-RA_build/2801/console

This reverts commit r224300.

llvm-svn: 224317
2014-12-16 05:28:07 +00:00
Jonathan Roelofs ab534366fe Appease the c++14 buildbots
llvm-svn: 224304
2014-12-16 01:18:11 +00:00
Marshall Clow e8a651b02d Comment out the breaking tests until I figure out what's going on here.
llvm-svn: 224301
2014-12-16 00:59:59 +00:00
Jonathan Roelofs 075406fdc9 Fix installheaders target's permissions
llvm-svn: 224300
2014-12-16 00:48:13 +00:00
Marshall Clow b58f003e86 Once more w/o the typo.
llvm-svn: 224298
2014-12-16 00:46:23 +00:00
Marshall Clow 8a389a5786 Fix the literal string that I said would be six elements long to actually be six elements long. Octal. Sheesh.
llvm-svn: 224297
2014-12-16 00:45:47 +00:00
Marshall Clow 470a231b7c Add test to ensure that iterator_traits<NotAnIterator> doesn't have a value type
llvm-svn: 224295
2014-12-16 00:30:07 +00:00
Marshall Clow b04058e8c1 Implement LWG 2217 - operator==(sub_match, string) slices on embedded '\0's
llvm-svn: 224292
2014-12-15 23:57:56 +00:00
Eric Fiselier bfd53cd2af Add option to turn off installation of headers.
llvm-svn: 224162
2014-12-12 22:52:58 +00:00
Sergey Dmitrouk 9e3a60769f Include newlib-specific locales in __locale
llvm-svn: 224111
2014-12-12 08:36:16 +00:00
Eric Fiselier 0e8f0d9198 Add support for building libc++ as a 32 bit library
llvm-svn: 224096
2014-12-12 03:12:18 +00:00
Eric Fiselier 7a68749f7f Fix building and running tests when LIBCXX_ENABLE_EXCEPTIONS or LIBCXX_ENABLE_RTTI are turned off.
llvm-svn: 224095
2014-12-12 02:36:23 +00:00
Jonathan Roelofs ebb54954a5 Add 'REQUIRES: long_tests' to one more long test
llvm-svn: 224069
2014-12-11 22:27:49 +00:00
Jonathan Roelofs 7c2f55c3b9 Add 'REQUIERS: long_tests' to a few more long tests
llvm-svn: 224064
2014-12-11 22:05:18 +00:00
Jonathan Roelofs 963bdd7c0a Fix platform_support.h's get_temp_file_name() on Newlib under __STRICT_ANSI__
llvm-svn: 224057
2014-12-11 20:56:40 +00:00
Jonathan Roelofs cf81121877 Add an XFAIL for Newlib's missing uchar.h
llvm-svn: 224037
2014-12-11 19:11:39 +00:00
Jonathan Roelofs 256ecc3c2a Mark a bunch of long running tests as 'REQUIRES: long_tests'
This lets us skip them as UNSUPPORTED on slow systems like QEMU

llvm-svn: 224032
2014-12-11 18:35:36 +00:00
Jonathan Roelofs 2f63b50761 Mark some more fenv tests as UNSUPPORTED by newlib
llvm-svn: 224024
2014-12-11 16:17:26 +00:00
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
Eric Fiselier a38dd8aad2 Add special case for finding the in-tree ABI library.
When libcxx is built in-tree with libcxxabi it links against libcxxabi using
the name of the cmake target and not the actual library name. The cmake target
will not work with `find_library()`, so it needs special case handling.

llvm-svn: 220121
2014-10-18 02:19:28 +00:00
Eric Fiselier 6f9da55c0f [libcxx] Add support for building and testing with an ABI library not along linker paths
Summary:
This patch adds support for building/testing libc++ with an ABI library that the linker would not normally find.

- `CMAKE_LIBRARY_PATH` is used to specify the list of search directories.
- The ABI library is now found using `find_library` instead of assuming its along the linker's search path.
- `CMAKE_LIBRARY_PATH` is passed to our LIT config as `library_paths`.
- For each path in `library_paths` the following flags are added `-L<path> -Wl,-rpath -Wl,<path>`

Some changes in existing behavior were also added:
- `target_link_libraries` is now passed the ABI library file instead of the library name. Ex `target_link_libraries(cxx "/usr/lib/libc++abi.so")` vs `target_link_libraries(cxx "c++abi")`.
- `-Wl,-rpath -Wl,<path>` is now used on OSX to link to libc++ instead of env['DYLD_LIBRARY_PATH'] if `use_system_lib=False`.




Reviewers: mclow.lists, danalbert, EricWF

Reviewed By: EricWF

Subscribers: emaste, cfe-commits

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

llvm-svn: 220118
2014-10-18 01:15:17 +00:00
Eric Fiselier 07df631129 [libcxx] Fix SFINAE in <cmath>. Patch from K-Ballo.
Delay instantiation of `__numeric_type` within <cmath>, 
don't instantiate it when the `is_arithmetic` conditions do not hold as it causes
errors with user-defined types with ambiguous conversions. Fixes PR21083.

llvm-svn: 219998
2014-10-17 00:31:47 +00:00
Eric Fiselier 04c1b74cb8 [libcxx] Add support for LLVM_USE_SANITIZER=Undefined
LLVM_USE_SANITIZER=Undefined support was added to the LLVM CMake configuration.
Update libc++'s handling of LLVM_USE_SANITIZER to support this as well.

llvm-svn: 219987
2014-10-16 23:21:59 +00:00
Eric Fiselier ce842e8c4a Fix bad link in documentation. Thanks to rsmith
llvm-svn: 219898
2014-10-16 03:15:31 +00:00
Eric Fiselier 8c5bc1cb5f Add my buildbot to list of libc++ buildbots in documentation
llvm-svn: 219894
2014-10-16 02:48:59 +00:00
Marshall Clow 14c5ec5194 Fixes PR21157 'tuple: non-default constructible tuple hard failure' Thanks to Louis Dionne for the bug report and the patch.
llvm-svn: 219785
2014-10-15 10:33:02 +00:00
Marshall Clow a2a481e0e3 Fix for PR 19616: 'tuple_cat of nested tuples fails in noexcept specification'. Thanks to Louis Dionne for the fix.
llvm-svn: 219243
2014-10-07 21:42:12 +00:00
Dan Albert cfc9229966 Fix win32 support header for mingw32.
These functions are defined as static in the mingw32 headers.

llvm-svn: 219140
2014-10-06 20:06:33 +00:00
Nico Weber 28d692d30e Mark module atomic as cplusplus11.
With clang, the header atomic requires __has_feature(cxx_atomic), which is only
true in c++11 mode. Because of this, when using modules in c++98 with libc++
compilation of the std module would fail without this change, PR21002.

(With gcc, only gcc4.7+ is needed, no c++11. But gcc doesn't have modules yet,
and the module.modulemap language can't express things like "this is only
required if the compiler is clang". If gcc gets module support, we'd probably
have a module.modulemap file for each compiler that libc++ supports?)

llvm-svn: 218372
2014-09-24 04:44:54 +00:00
Eric Fiselier 2b232cf06c [libcxx] Fix installation of ABI headers. Fixes PR20936
Summary:
I changed the build so that each ABI header gets its own install rule. This gives us the flexibility to install different headers in different directories. 
This also fixes the problem where libstdc++ bits/<header>'s were not being installed under a bits directory.

Test Plan: I tested this patch on linux against libstdc++ and libcxxabi.

Reviewers: danalbert, mclow.lists, jroelofs

Reviewed By: jroelofs

Subscribers: jhunold, cfe-commits

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

llvm-svn: 218309
2014-09-23 14:42:28 +00:00
Marshall Clow 0f79772ecc Fix some type-traits (is_assignable, etc) dealing with classes that take non-const references as 'right hand side'. Add tests. Fixes PR# 20836
llvm-svn: 218286
2014-09-22 23:58:00 +00:00
Jonathan Roelofs 4f1561a5dd Support newlib as libc++'s C library [locale part]
http://reviews.llvm.org/D5385

llvm-svn: 218144
2014-09-19 20:09:12 +00:00
Marshall Clow 3c71bff667 Fix PR#20843: binomial_distribution<unsigned> is broken. Add test to ensure that signed and unsigned verstions produce the same sequence.
llvm-svn: 217976
2014-09-17 18:33:58 +00:00
Dan Albert 353f358d24 Fix char_traits functions for GCC compatibility.
GCC 4.9 fails to inline these functions at -O1 because they are used
indirectly. Declare them as inline instead of always_inline. Discussion
in GCC bugreport: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63220

llvm-svn: 217961
2014-09-17 16:34:29 +00:00
Marshall Clow 29298664d9 Add include of <cassert> for the operator comma
llvm-svn: 217938
2014-09-17 04:09:35 +00:00
Marshall Clow 85d5e6f25b K-ballo pointed out *another* mistype in my change
llvm-svn: 217936
2014-09-17 01:58:15 +00:00
Marshall Clow bd7c7b5551 Fix for mismatch to handle evil iterators which overload operator comma
llvm-svn: 217903
2014-09-16 20:40:05 +00:00
Marshall Clow f1e473bad9 Create a 'comma_iterator' class that overloads operator, and asserts when it's called. Add tests to mismatch to make sure it can't be blindsided by such an evil iterator. More tests for other algorithms forthcoming. Thanks to STL for pointing this out at CppCon and Yakov Galka for opening LWG issue #2133
llvm-svn: 217902
2014-09-16 20:38:11 +00:00
Marshall Clow d1b5078579 Fix a bug in the move-assigment operator for basic_stringbuf. Thanks to Johnathan Wakeley for the bug report
llvm-svn: 217894
2014-09-16 18:57:52 +00:00
Marshall Clow 10a65e2ee1 Thanks to K-ballo for noting a second incorrect noexcept clause in tuple - and suggesting a more correct way to write the first
llvm-svn: 217884
2014-09-16 17:08:21 +00:00
Marshall Clow 3175f49d33 Fix a bad noexcept clause in tuple's move constructor
llvm-svn: 217878
2014-09-16 15:36:14 +00:00
Marshall Clow 30d0c1ab5f Forgot 'const' on my last checkin
llvm-svn: 217877
2014-09-16 15:33:53 +00:00
Marshall Clow f45b237c51 Some of the synopsis was left out of these headers, and the copy construction/assignment should have been marked as deleted. Done. No functionality change, because the base class (base_ios) was marked as non-copyable already.
llvm-svn: 217876
2014-09-16 15:27:01 +00:00
Dan Albert 0bb696800f PR20546: Fix tests for compare_exchange_weak.
These calls are allowed to fail spuriously.

29.6.5.25:

    Remark: A weak compare-and-exchange operation may fail spuriously.
    That is, even when the contents of memory referred to by expected
    and object are equal, it may return false and store back to expected
    the same memory contents that were originally there. [ Note: This
    spurious failure enables implementation of compare and-exchange on a
    broader class of machines, e.g., load-locked store-conditional
    machines. A consequence of spurious failure is that nearly all uses
    of weak compare-and-exchange will be in a loop.

To fix this, we replace any assert() that expects
std::atomic::compare_exchange_weak() to return true with a loop. If the
call does not return true within N runs (with N currently equal to 10),
then the test fails.

http://llvm.org/bugs/show_bug.cgi?id=20546

llvm-svn: 217319
2014-09-06 20:38:25 +00:00
Jonathan Roelofs afe6794bc2 Address some post-commit review comments on r217261
llvm-svn: 217276
2014-09-05 20:28:44 +00:00
Jonathan Roelofs b3fcc67f8f Allow libc++ to be built on systems without POSIX threads
If you're crazy enough to want this sort of thing, then add
-D_LIBCPP_HAS_NO_THREADS to your CXXFLAGS and
--param=additiona_features=libcpp-has-no-threads to your lit commnad line.

http://reviews.llvm.org/D3969

llvm-svn: 217271
2014-09-05 19:45:05 +00:00
Jonathan Roelofs b352db7f57 Bugfix: allow additional_features to be empty
llvm-svn: 217268
2014-09-05 19:03:46 +00:00
Jonathan Roelofs 3547c5441e Set -D_LIBCPP_HAS_NO_THREADS and -D_LIBCPP_HAS_NO_MONOTONIC_CLOCK based on available_features
http://reviews.llvm.org/D5214

llvm-svn: 217261
2014-09-05 17:21:57 +00:00
Viktor Kutuzov d3b10d9daf Define ELAST in libcxx's config header on FreeBSD
Differential Revision: http://reviews.llvm.org/D5165

llvm-svn: 217146
2014-09-04 13:25:46 +00:00
Marshall Clow b67bc4ea0d Make the ASAN RAII object a nop when building w/o ASAN
llvm-svn: 217082
2014-09-03 21:37:43 +00:00
Jonathan Roelofs 3bb7b558df Detection for _LIBCPP_HAS_NO_MONOTONIC_CLOCK caused several more build breakages
Remove it for now. This flag can be set in build scripts instead.

llvm-svn: 217061
2014-09-03 18:48:28 +00:00
Alexey Volkov e46ca71f0b Allow libc++ to be built with GCC 5.0 compiler
Differential Revision: http://reviews.llvm.org/D5169

llvm-svn: 217038
2014-09-03 14:30:39 +00:00
Justin Bogner 2cfd1fed21 test: Make it possible to opt in to use_clang_verify per test
This modifies the use_clang_verify parameter I added in r217009 to
only apply to tests that specifically ask for it via // USE_VERIFY.
This allows us to incrementally convert tests, but start enjoying the
benefits right away.

Suggested by Eric Fiselier in code review.

llvm-svn: 217017
2014-09-03 06:01:52 +00:00
Eric Fiselier 99ff9c7bb2 Fix buffer overflow issue in valarray test
llvm-svn: 217012
2014-09-03 05:47:35 +00:00
Justin Bogner 33a2a2ed1a test: Allow using clang -verify for failures rather than exit 1
Currently, failure tests work by checking that compilation exits 1.
This can lead to tests that fail for the wrong reason, so it'd be
preferable to convert them to check for specific errors.

This adds use_clang_verify parameter that runs failure tests using
clang's -verify flag. I'll convert some tests in subsequent commits,
and once all of the tests are converted we should key this on whether
cxx_under_test is clang.

I've also converted one of the unique.ptr tests, since it's the one
that motivated the idea of using clang -verify when possible in the
review of r216317.

llvm-svn: 217009
2014-09-03 04:32:08 +00:00
Jonathan Roelofs 112237b476 Fix yet another aspect of the build breakage caused by r216949
llvm-svn: 217001
2014-09-03 00:29:02 +00:00
Jonathan Roelofs ffa0895c3b Fix comment that was obsoleted by r216949
llvm-svn: 216999
2014-09-02 23:52:46 +00:00
Jonathan Roelofs bb8fd4ccdb Fix build breakage introduced in r216949
The bug shows up on systems that `#define _POSIX_CLOCK_MONOTONIC 0` to indicate
that users of CLOCK_MONOTONIC must check sysconf at runtime.

See: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/unistd.h.html
llvm-svn: 216997
2014-09-02 23:49:15 +00:00
Kostya Serebryany 3f0e834842 [asan] Make vector asan annotations exception-friendly
Fix vector asan annotations with RAII.
Add a test.
Also, remove one dead function.
Review: http://reviews.llvm.org/D4170

llvm-svn: 216995
2014-09-02 23:43:38 +00:00
Jonathan Roelofs 6ca513c913 Silence _LIBCPP_ELAST porting warning on __APPLE__
This fixes a warning accidentally introduced in r216943.

llvm-svn: 216977
2014-09-02 22:09:50 +00:00
Jonathan Roelofs f4bc679cad Don't #define _LIBCPP_HAS_NO_MONOTONIC_CLOCK on __APPLE__
This fixes PR20839, which was a bug in r216949.

llvm-svn: 216975
2014-09-02 21:56:01 +00:00
Jonathan Roelofs c59e585126 Partially address a FIXME in steady_clock::now()
http://reviews.llvm.org/D4045

llvm-svn: 216949
2014-09-02 21:14:38 +00:00
Jonathan Roelofs a409d59cf5 Newlib names ELAST differently than linux
llvm-svn: 216943
2014-09-02 20:34:23 +00:00
Marshall Clow bbb3a7f51c Fix PR#20834 - 'is_trivially_destructible yeilds wrong answer for arrays of unknown bound' Thanks to K-ballo for the bug report. Update a few of the other tests while we're here, and fix a typo in a test name.
llvm-svn: 216909
2014-09-02 16:19:38 +00:00