Commit Graph

478 Commits

Author SHA1 Message Date
Eric Fiselier
abd892af3a Implement LWG 2488 - Make the placeholders constexpr.
This patch makes the bind placeholders in std::placeholders both (1) const and
(2) constexpr (See below).

This is technically a breaking change for any code using the placeholders
outside of std::bind and depending on them being non-const. However I don't
think this will break any real world code.

(1) Previously the placeholders were non-const extern globals in all
dialects. This patch changes these extern globals to be const in all dialects.
Since the cv-qualifiers don't participate in name mangling for globals this
is an ABI compatible change.

(2) Make the placeholders constexpr in C++11 and beyond. Although LWG 2488 only
applies to C++17 I don't see any reason not to backport this change.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273824 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-26 21:01:34 +00:00
Eric Fiselier
55e084dd4d Cleanup filesystem::permissions ever more.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273392 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-22 07:57:38 +00:00
Eric Fiselier
e1a1a1ffb7 Avoid unnecessary stat call in filesystem::permissions implementation.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273391 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-22 07:24:00 +00:00
Eric Fiselier
7c96ddb563 Implement LWG issue 2720. Replace perms::resolve_symlinks with perms::symlink_nofollow.
This changes how filesystem::permissions(p, perms) handles symlinks. Previously
symlinks were not resolved by default instead only getting resolved when
"perms::resolve_symlinks" was used. After this change symlinks are resolved
by default and perms::symlink_nofollow must be given to change this.

This issue has not yet been moved to Ready status, and I will revert if it
doesn't get moved at the current meeting. However I feel confident that it
will and it's nice to have implementations when moving issues.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273328 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-21 22:42:42 +00:00
Eric Fiselier
897b2f9a70 Fix various undefined behavior found by UBSan.
* Fix non-null violation in strstream.cpp
  Overflow was calling memcpy with a null parameter and a size of 0.

* Fix std/atomics/atomics.flag/ tests:
  a.test_and_set() was reading from an uninitialized atomic, but wasn't
  using the value. The tests now clear the flag before performing the
  first test_and_set. This allows UBSAN to test that clear doesn't read
  an invalid value.

* Fix std/experimental/algorithms/alg.random.sample/sample.pass.cpp
  The tests were dereferencing a past-the-end pointer to an array so that
  they could do pointer arithmetic with it. Instead of dereference the iterator
  I changed the tests to use the special 'base()' test iterator method.

* Add -fno-sanitize=float-divide-by-zero to suppress division by zero UBSAN diagnostics.
  The tests that cause float division by zero are explicitly aware that they
  are doing that. Since this is well defined for IEEE floats suppress the warnings
  for now.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273107 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-19 07:08:27 +00:00
Eric Fiselier
70f7afec38 Fix bugs in last_write_time implementation.
* Fix passing a negative number as either tv_usec or tv_nsec. When file_time_type
  is negative and has a non-zero sub-second value we subtract 1 from tv_sec
  and make the sub-second duration positive.

* Detect and report when 'file_time_type' cannot be represented by time_t. This
  happens when using large/small file_time_type values with a 32 bit time_t.

There is more work to be done in the implementation. It should start to use
stat's st_mtim or st_mtimeval if it's provided as an extension. That way
we can provide a better resolution.



git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273103 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-19 02:04:49 +00:00
Eric Fiselier
2730c251ae Remove Apple specific guard for utimensat. Use !defined(UTIME_OMIT) instead.
As pointed out by @majnemer this is a better way to detect utimensat on all
platforms. The Apple specific guard is unneeded.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273093 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-18 19:11:40 +00:00
Eric Fiselier
7840a8ca84 Use utimes instead of utimensat when !defined(UTIME_OMIT). Fixes build for older GLIBC versions
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273088 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-18 17:37:04 +00:00
Eric Fiselier
ba9dccd902 Enable building and using atomic shared_ptr for GCC.
Summary:
Currently the  implementation of [util.smartptr.shared.atomic] is provided only when using Clang, and not with GCC. This is a relic of not having a GCC implementation of <atomic>, even though <atomic> isn't actually used in the implementation. This patch enables support for atomic shared_ptr functions when using GCC.

Note that this is not a header only change. Previously only Clang builds of libc++.so would provide the required symbols. There is no reason  for this restriction.
After this change both Clang and GCC builds should be binary compatible with each other WRT these symbols.


Reviewers: mclow.lists, rmaprath, EricWF

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273076 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-18 02:12:53 +00:00
Eric Fiselier
591e18f6aa Add additional tests in an attempt to diagnose ARM test failures.
Currently 4 tests are failing on the ARM buildbot. To try and diagnose each
of the failures this patch does the following:

1) path.itr/iterator.pass.cpp
   * Temporarily print iteration sequence to see where its failing.

2) path.native.obs/string_alloc.pass.cpp
   * Remove test that ::new is not called when constructing a short string
     that requires a conversion. Since during the conversion global locale
     objects might be constructed.

3) fs.op.funcs/space.pass.cpp
   * Explicitly use uintmax_t in the implementation of space, hopefully
     preventing possible overflows.
   * Add additional tests that check for overflow is the calculation of the
     space_info values.
   * Add additional tests for the values returned from statfvs.

4) fs.op.funcs/last_write_time.pass.cpp
   * No changes made yet.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273075 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-18 02:11:48 +00:00
Eric Fiselier
f1bc722d8c Fix bugs in recursive_directory_iterator::increment(ec) implementation and tests.
r273060 didn't completely fix the issues in recursive_directory_iterator and
the tests. This patch follows up with more fixes

* Fix bug where recursive_directory_iterator::increment(ec) did not reset
  the error code if no failure occurred.

* Fix bad assertion in the recursive_directory_iterator::increment(ec) test
  that would only fire for certain iteration orders.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273070 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-17 23:57:16 +00:00
Eric Fiselier
6f3b01af9c Fix bugs in recursive_directory_iterator implementation and tests.
There are two fixes in this patch:

* Fix bug where the constructor of recursive_directory_iterator did not reset
  the error code if no failure occurred.

* Fix tests were dependent on the iteration order of the test directories.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273060 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-17 22:22:37 +00:00
Eric Fiselier
6e9a694dce Add Filesystem TS -- Complete
Add the completed std::experimental::filesystem implementation and tests.
The implementation supports C++11 or newer.

The TS is built as part of 'libc++experimental.a'. Users of the TS need to
manually link this library. Building and testing the TS can be disabled using
the CMake option '-DLIBCXX_ENABLE_FILESYSTEM=OFF'.

Currently 'libc++experimental.a' is not installed by default. To turn on the
installation of the library use '-DLIBCXX_INSTALL_EXPERIMENTAL_LIBRARY=ON'.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@273034 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-17 19:46:40 +00:00
Ed Schouten
a8f47cc800 Remove CloudABI specific workaround.
CloudABI has gained the mblen_l() function in the meantime that does
properly return whether the character set has shift-states (read:
never).


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@272886 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-16 11:53:11 +00:00
Dan Albert
b2ce77fc21 Add an Android version check for GNU strerror_r.
Summary:
Android didn't gain GNU's strerror_r until Marshmallow. If we're
building libc++ against something older (we build the NDK library
against the oldest release we support, currently Gingerbread), fall
back to the POSIX version.

Reviewers: mclow.lists, EricWF

Subscribers: tberghammer, danalbert, srhines, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@272827 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-15 20:20:32 +00:00
Eric Fiselier
d3f1134dca Fix syntax error in r272640.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@272641 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-14 06:08:10 +00:00
Eric Fiselier
17402e36fa Fix error checking for strerror_r implementations that return the error code.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@272640 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-14 06:03:20 +00:00
Eric Fiselier
a30cee2258 Make system_error::message() thread safe. Fixes PR25598.
Summary:
system_error::message() uses `strerror` for the generic and system categories. This function is not thread safe.

The fix is to use `strerror_r`. It has been available since 2001 for GNU libc and since BSD 4.4 on FreeBSD/OS X.
On platforms with GNU libc the extended version is used which always returns a valid string, even if an error occurs.

In single-threaded builds `strerror` is still used.

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

Reviewers: majnemer, mclow.lists

Subscribers: erik65536, cfe-commits, emaste

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@272633 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-14 03:45:31 +00:00
Asiri Rathnayake
0dd618b723 [libcxx] Fix thread join.pass.cpp segfault after r271475
Some pthread implementations do not like being called pthead_join()
with the pthread_t argument set to 0, and causes a segfault. This
patch fixes this issue by validating the pthread_t argument before
invoking pthread_join().

NFC.

Differential revision: http://reviews.llvm.org/D20929

Change-Id: Ief817c57bd0e1f43cbaa03061e02417d6a180c38
Reviewers: EricWF

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@271634 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-03 08:45:26 +00:00
Eric Fiselier
ab46ace714 Fix memory_resource build for _LIBCPP_HAS_NO_THREADS
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268850 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-07 05:37:31 +00:00
Eric Fiselier
33861da4f5 Fix one more usage of _LIBCPP_HAS_NO_EXCEPTIONS
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268839 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-07 02:33:25 +00:00
Eric Fiselier
257fd699fd Add <experimental/memory_resource>
Reviewers: mclow.lists, EricWF

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268829 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-07 01:04:55 +00:00
Asiri Rathnayake
35ff03b7c2 Refactor pthread usage of libcxx.
This patch extracts out all the pthread dependencies of libcxx into the
new header __threading_support. The motivation is to make it easy to
re-target libcxx into platforms that do not support pthread.

Original patch from Fulvio Esposito (fulvio.esposito@outlook.com) - D11781

Applied with tweaks - D19412

Change-Id: I301111f0075de93dd8129416e06babc195aa936b

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268734 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-06 14:06:29 +00:00
Eric Fiselier
5e4698c9a6 Create new library 'libc++experimental.a' for packaging TS symbols.
Summary:
Out-of-line symbols for <experimental/...> headers are not ABI or API stable and cannot live in the 'libc++.dylib'. Currently they have nowhere to live. I would like to add a new library target `libc++experimental.a` to fix this. 

Previously I had suggested different libraries for different TS's (`libc++filesystem.a`, 'libc++LFTS.a`, ect). I no longer think this is the right approach.
Instead `c++experimental` will hold *all* TS implementations as a single monolithic library. I see two main benefits to this:

1. Users only have to know about and manually link one library.
2. It makes it easy to implement TS's with one or two out-of-line symbols. (Ex. PMRs)

`c++experimental` provides NO ABI compatibility. Symbols can freely be added/removed/changed without concern for ABI stability.
I will add documentation for this after landing this patch (but before adding anything to it).

`c++experimental` only builds as a static library. By default CMake will build/test this library but will *NOT* install it.

This patch adds the CMake and LIT logic needed to build/test the new library. Once this lands I plan on using it to implement parts of `<experimental/memory_resource>`.



Reviewers: mclow.lists

Subscribers: cfe-commits, theraven, krememek, dexonsmith, bcraig, beanz, danalbert

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@268443 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-03 21:30:18 +00:00
Eric Fiselier
566bcb4bad Fix most GCC attribute ignored warnings
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@267074 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-21 22:54:21 +00:00
Ben Craig
fd556585b2 Reorganize _LIBCPP_LOCALE__L_EXTENSIONS
Instead of checking _LIBCPP_LOCALE_L_EXTENSIONS all over, instead check it
once, and define the various *_l symbols once. The private redirector symbol
names are all prefixed with _libcpp_* so that they won't conflict with user
symbols, and so they won't conflict with future C library symbols. In
particular, glibc likes providing private symbols such as __locale_t, so we
should follow a different naming pattern (like _libcpp_*) to avoid problems
on that front.

Tested on Linux with glibc. Hoping for the best on OSX and the various BSDs.

http://reviews.llvm.org/D17456


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@263016 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-09 15:39:39 +00:00
Ben Craig
8057a58530 [libcxx] Whitelist inclusion of sysctl.h instead of blacklisting
Instead of excluding all known operating systems that are not derived from BSD,
I now include all operating systems that claim to be derived from BSD.
Hopefully, that will make it so that this check doesn't need to change for
every new operating system that comes along.

http://reviews.llvm.org/D16634


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@259193 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-29 13:53:23 +00:00
Akira Hatanaka
ef67e427b5 [libcxx] Remove pragmas that were needed to suppress warnings produced
by -Wpadded.

We don't need these pragmas anymore because -Wpadded was removed from
buildit in r258900.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@259023 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-28 06:13:36 +00:00
Eric Fiselier
a9e91f30ee Add more missing license headers
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@258198 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-19 21:58:49 +00:00
Vasileios Kalintiris
5e00a713ed Use libcxx's default rune table with the Musl C library.
Summary:
Also, there are no exported character type tables from Musl so we have to
Fallback to the standard functions. This reduces the number of libcxx's
test-suite failures down to ~130 for MIPS. Most of the remaining failures
come from the atomics (due to the lack of 8-byte atomic-ops in MIPS32) and
thread tests.

Reviewers: mclow.lists, EricWF, dalias, jroelofs

Subscribers: tberghammer, danalbert, srhines, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@253972 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-24 10:24:54 +00:00
Asiri Rathnayake
cc2e93cff0 Make it possible to build a no-exceptions variant of libcxx.
Fixes a small omission in libcxx that prevents libcxx being built when
-DLIBCXX_ENABLE_EXCEPTIONS=0 is specified.

This patch adds XFAILS to all those tests that are currently failing
on the new -fno-exceptions library variant. Follow-up patches will
update the tests (progressively) to cope with the new library variant.

Change-Id: I4b801bd8d8e4fe7193df9e55f39f1f393a8ba81a

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@252598 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-10 11:41:22 +00:00
Vasileios Kalintiris
579b42b413 Add initial support for the MUSL C library.
Summary:
This patch adds the LIBCXX_LIBC_IS_MUSL cmake option to allow the
building of libcxx with the Musl C library. The option is necessary as
Musl does not provide any predefined macro in order to test for its
presence, like GLIBC. Most of the changes specify the correct path to
choose through the various #if/#else constructs in the locale code.

Depends on D13407.

Reviewers: mclow.lists, jroelofs, EricWF

Subscribers: jfb, tberghammer, danalbert, srhines, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@252457 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-09 10:21:04 +00:00
Benjamin Kramer
8f6e763c49 Fix an unfortunate yet old typo that never got attention before r250507.
Should fix the xcode libc++ build.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@250508 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-16 11:26:26 +00:00
Benjamin Kramer
99290c6ec8 Remove a long-standing __has_include hack.
This was put in to get libc++ building without libcxxabi. We now have
macros that show that we are building against libcxxabi so use that
instead. This guards against existing but broken cxxabi.h headers on the
system.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@250507 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-16 11:14:30 +00:00
Dimitry Andric
da3ca86451 Add placeholder __libcpp_relaxed_store() for when atomic builtins are not available.
Summary:
In rL241532, atomic_support.h was added, which provides handling of
atomic operations for libc++.  When atomic builtins are not available,
it emits a warning about being unsupported, but it still provides a
number of stubs for the required functions.

However, it misses a stub for `__libcpp_relaxed_store()`.  Add it, by
using the same implementation as for `__libcpp_atomic_store()`.

(Note that I encountered this on arm-freebsd, which still defaults to
armv4, and does not have the runtime libcalls to support atomic
builtins.  For now, I have simply disabled using them.)

Reviewers: mclow.lists, EricWF

Subscribers: theraven, cfe-commits, jroelofs, majnemer, aemerson

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@248313 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-22 18:55:37 +00:00
Eric Fiselier
ed65d0dba5 Fix a typo: overidden -> overridden - Patch from Kai Zhao
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@245539 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-20 05:23:16 +00:00
Eric Fiselier
00f4a49b0b [libcxx] Allow use of <atomic> in C++03. Try 3.
Summary:
After putting this question up on cfe-dev I have decided that it would be best to allow the use of `<atomic>` in C++03. Although static initialization is a concern the syntax required to get it is C++11 only. Meaning that C++11 constant static initialization cannot silently break in C++03, it will always cause a syntax error. Furthermore `ATOMIC_VAR_INIT` and `ATOMIC_FLAG_INIT` remain defined in C++03 even though they cannot be used because C++03 usages will cause better error messages.

The main change in this patch is to replace `__has_feature(cxx_atomic)`, which only returns true when C++ >= 11, to `__has_extension(c_atomic)` which returns true whenever clang supports the required atomic builtins.


This patch adds the following macros:
* `_LIBCPP_HAS_C_ATOMIC_IMP`      - Defined on clang versions which provide the C `_Atomic` keyword.
* `_LIBCPP_HAS_GCC_ATOMIC_IMP` - Defined on GCC > 4.7. We must use the fallback atomic implementation.
* `_LIBCPP_HAS_NO_ATOMIC_HEADER` - Defined when it is not safe to include `<atomic>`.

`_LIBCPP_HAS_C_ATOMIC_IMP` and `_LIBCPP_HAS_GCC_ATOMIC_IMP` are mutually exclusive, only one should be defined. If neither is defined then `<atomic>` is not implemented and including `<atomic>` will issue an error.

Reviewers: chandlerc, jroelofs, mclow.lists

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@245463 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-19 17:21:46 +00:00
Eric Fiselier
a8dca5f978 Remove commented out TODOs. They defined unneeded methods.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@245411 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-19 03:48:08 +00:00
Eric Fiselier
3b1fb53a65 Move atomic_support.h and config_elast.h into src/include
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@245354 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-18 21:08:54 +00:00
Eric Fiselier
65a1d45c0a Mark any as done and comment out extra methods until speaking to Marshall
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@243729 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-31 02:29:11 +00:00
Eric Fiselier
7175a07921 [libcxx] Add <experimental/any> v2.
Summary:
This patch adds the second revision of <experimental/any>. 
I've been working from the LFTS draft found at this link. https://rawgit.com/cplusplus/fundamentals-ts/v1/fundamentals-ts.html#any



Reviewers: danalbert, jroelofs, K-ballo, mclow.lists

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@243728 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-31 02:24:58 +00:00
Eric Fiselier
c6e466911f [libcxx] Add atomic_support.h header to src that handles needed atomic operations.
Summary:
In some places in libc++ we need to use the `__atomic_*` builtins. This patch adds a header that provides access to those builtins in a uniform way from within the dylib source.

If the compiler building the dylib does not support these builtins then a warning is issued.

Only relaxed loads are needed within the headers. A singe function to do these relaxed loads has been added to `<memory>`.

This patch applies the new atomic builtins to `__shared_count` and `call_once`.

Reviewers: mclow.lists

Subscribers: majnemer, jroelofs, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@241532 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-07 00:27:16 +00:00
Ed Schouten
7c1ebcf6fd Make locale code compile on CloudABI.
After r241454 landed, libc++'s locale code compiles on CloudABI, with
the exception of the following two bits:

- CloudABI doesn't have setlocale(), as the C library does not keep
  track of any global state. The global locale is always set to "C".
  Disable the call to setlocale() on this system.
- Similarly, mbtowc_l() is also not present, as it is also not
  thread-safe. As CloudABI does not support state-dependent encodings,
  simply disable that part of the logic.

The locale code now compiles out of the box on CloudABI.

Differential Revision:	http://reviews.llvm.org/D10729
Reviewed by:	jroelofs


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@241455 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-06 15:39:36 +00:00
Ed Schouten
9e97eb890c Cleanup: prefer _LIBCPP_GET_C_LOCALE over __cloc().
The __cloc() function is only present in case the environment does not
provide a way to refer to the C locale using a compile-time constant
expression. _LIBCPP_GET_C_LOCALE seems to be defined unconditionally.

This improves compilation of the locale code on CloudABI.

Differential Revision:	http://reviews.llvm.org/D10690
Reviewed by:	jroelofs


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@241454 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-06 15:37:40 +00:00
Marshall Clow
abadb458d0 Implement N4508: shared_mutex. Reviewed as http://reviews.llvm.org/D10480
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@241067 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-30 14:04:14 +00:00
Marshall Clow
8c42c8cb46 When building libc++, we use '"' as a delimiter instead of '<' when including libc++ header files. This is so that the dylib gets built with our headers; rather than the system-installed ones. We do this in most places already, just fixing a couple of inconsistent uses.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@240412 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-23 14:45:02 +00:00
Eric Fiselier
56a599b976 Fix PR23293 - Do not unlock shared state before notifying consumers.
Within the shared state methods do not unlock the lock guards manually. This
could cause a race condition where the shared state is destroyed before the
method is complete.


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@239577 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-12 00:41:34 +00:00
Joerg Sonnenberger
64c6248499 Avoid C-style cast.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@239160 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-05 15:54:26 +00:00
Marshall Clow
22f6c0532d Move uncaught_exeption() definition inside the #ifdef block like uncaught_exceptions()
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@238879 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-02 22:25:23 +00:00
Marshall Clow
8731c5da46 Implement uncaught_exceptions() using the newly added hooks in libc++abi, when available
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@238846 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-02 15:33:38 +00:00