Commit Graph

3660 Commits

Author SHA1 Message Date
Dan Albert f9dc6670bc Avoid implementation defined behavior in a test.
Summary:
num_put::put uses %p for pointer types, but the exact format of %p is
implementation defined behavior for the C library. Compare output to
snprintf for portability.

Reviewers: EricWF, mclow.lists

Reviewed By: EricWF

Subscribers: cfe-commits

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

llvm-svn: 293926
2017-02-02 19:44:11 +00:00
Asiri Rathnayake e396d8e260 Extend XFAIL to c++98.
NFC.

llvm-svn: 293881
2017-02-02 11:56:26 +00:00
Marshall Clow 6f033f0c30 Fix up some no-exception compile failures
llvm-svn: 293623
2017-01-31 13:12:32 +00:00
Alex Lorenz 143b58577d Workaround new -Wshadow warning introduced by r293599
llvm-svn: 293619
2017-01-31 12:37:48 +00:00
Marshall Clow d107be846f Fix PR#31779: basic_string::operator= isn't exception safe.
llvm-svn: 293599
2017-01-31 03:40:52 +00:00
Justin Bogner 8335dd314f Revert "Adorn __call_once_proxy with `inline` and `_LIBCPP_INLINE_VISIBILITY`"
While this change didn't really hurt, it does lead to spurious
warnings about not being able to override weak symbols if you end up
linking objects built with this change to ones built without it.
Furthermore, since __call_once_proxy is called indirectly anyway it
doesn't actually inline ever.

Longer term, it would probably make sense to give this symbol internal
visibility instead.

This reverts r291497

llvm-svn: 293581
2017-01-31 01:26:09 +00:00
Saleem Abdulrasool cd79d0f5f3 experimental: avoid using raw _WIN32 in filesystem
Use the _LIBCPP_WIN32API macro instead of _WIN32 checks.  Fix a missed
renaming for style conformance.

llvm-svn: 293543
2017-01-30 19:57:27 +00:00
Saleem Abdulrasool 714058d29a experimental: port directory_iterator to Windows
This adds a basic first cut implementation for directory_iterator on
Windows.  It uses the FindFirstFile/FindNextFile which has the same
restrictions as opendir/readdir where there exists a TOCTOU race
condition.

llvm-svn: 293531
2017-01-30 18:50:34 +00:00
Saleem Abdulrasool cb04468c6a experimental: add missing file header
The directory_iterator implementation file was missing the file header.
Add one.  NFC.

llvm-svn: 293530
2017-01-30 18:50:32 +00:00
Saleem Abdulrasool e4ddaa4427 experimental: remove some extraneous _LIBCPP_FUNC_VIS
These member functions were decorated with `_LIBCPP_FUNC_VIS` when the
class is also decorated with external visibility.  This breaks down when
building for PE/COFF, where the member function cannot be decorated if
it is within a decorated class.  The class attribute will propagate to
the member.  Remove the extraneous decoration.

llvm-svn: 293454
2017-01-30 03:58:26 +00:00
Saleem Abdulrasool 14a05e62fa experimental: inline single use of a typedef
The typedef is not particularly long, and used in exactly one location.
Just spell it out at the site.  NFC.

llvm-svn: 293450
2017-01-30 00:15:50 +00:00
Saleem Abdulrasool a902e7aa94 experimental: tolerate the existence of a `__deref` macro
Microsoft's SAL has a `__deref` macro which results in a compilation
failure when building the filesystem module on Windows.  Rename the
member function internally to avoid the conflict.

llvm-svn: 293449
2017-01-30 00:15:47 +00:00
Saleem Abdulrasool 603b38dca1 experimental: remove dead function
This template was defined inline, within the TU only and had no uses
across the entire repository.  Remove the dead code.  NFC.

llvm-svn: 293445
2017-01-29 22:31:28 +00:00
Saleem Abdulrasool 87996f906a config: prevent the re-definition of a macro
This causes unnecessary warnings when building with `cl`.  Newer
versions of the C standard permit the redefinition of the macro to the
same value (which is the case here), unfortunately, `cl` does not yet
implement this.  Add a check to prevent the redefinition.

llvm-svn: 293439
2017-01-29 18:16:33 +00:00
Dimitry Andric 83dca5c3d1 Disable thread safety analysis for some functions in __thread_support
Many thread-related libc++ test cases fail on FreeBSD, due to the
following -Werror warnings:

    In file included from test/std/thread/thread.threads/thread.thread.this/sleep_until.pass.cpp:17:
    In file included from include/thread:97:
    In file included from include/__mutex_base:17:
    include/__threading_support:222:1: error: mutex '__m' is still held at the end of function [-Werror,-Wthread-safety-analysis]
    }
    ^
    include/__threading_support:221:10: note: mutex acquired here
      return pthread_mutex_lock(__m);
             ^
    include/__threading_support:231:10: error: releasing mutex '__m' that was not held [-Werror,-Wthread-safety-analysis]
      return pthread_mutex_unlock(__m);
             ^
    include/__threading_support:242:1: error: mutex '__m' is still held at the end of function [-Werror,-Wthread-safety-analysis]
    }
    ^
    include/__threading_support:241:10: note: mutex acquired here
      return pthread_mutex_lock(__m);
             ^
    include/__threading_support:251:10: error: releasing mutex '__m' that was not held [-Werror,-Wthread-safety-analysis]
      return pthread_mutex_unlock(__m);
             ^
    include/__threading_support:272:10: error: calling function 'pthread_cond_wait' requires holding mutex '__m' exclusively [-Werror,-Wthread-safety-analysis]
      return pthread_cond_wait(__cv, __m);
             ^
    include/__threading_support:278:10: error: calling function 'pthread_cond_timedwait' requires holding mutex '__m' exclusively [-Werror,-Wthread-safety-analysis]
      return pthread_cond_timedwait(__cv, __m, __ts);
             ^
    6 errors generated.

This is because on FreeBSD, the pthread functions have lock annotations.
Since the functions in __thread_support are internal to libc++ only, add
no_thread_safety_analysis attributes to suppress these warnings.

Reviewers: mclow.lists, EricWF, delesley, aaron.ballman
Reviewed By: aaron.ballman
Subscribers: ed, aaron.ballman, joerg, emaste, cfe-commits
Differential Revision: https://reviews.llvm.org/D28520

llvm-svn: 293197
2017-01-26 18:37:18 +00:00
Marshall Clow a98b5fd999 Fixed a couple of invalid statuses for 2665 and 2758
llvm-svn: 293179
2017-01-26 14:36:14 +00:00
Asiri Rathnayake e246350467 Fix chromium build (libcxx)
Remove the reference to pthread_mach_thread_np() in libcxx headers.

llvm-svn: 293167
2017-01-26 10:40:17 +00:00
Marshall Clow 3a3c09c5dd Use the new __has_feature(cxx_constexpr_string_builtins) for detection of the C-string intrinsics for constexpr support in std::char_traits. Thanks to Richard for the intrisic support.
llvm-svn: 293154
2017-01-26 06:58:29 +00:00
Marshall Clow 071aded6ee Fixed a typo in the synopsis (noecept -> noexcept). Thanks to Kim for the catch
llvm-svn: 293079
2017-01-25 20:14:03 +00:00
Mehdi Amini fd7165364b [libcxx] Mentions "targeting C++11 and above" instead of "targeting C++11" in the doc
llvm-svn: 293071
2017-01-25 17:00:30 +00:00
Marshall Clow 3cd9e94241 Implement LWG2556: Wide contract for future::share()
llvm-svn: 292992
2017-01-24 23:28:25 +00:00
Marshall Clow 63b560be69 Change the return type of emplace_[front|back] back to void when building with C++14 or before. Resolves PR31680.
llvm-svn: 292990
2017-01-24 23:09:12 +00:00
Marshall Clow e67179bc6c Remove auto_ptr in C++17. Get it back by defining _LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR
llvm-svn: 292986
2017-01-24 22:22:33 +00:00
Marshall Clow 86e7eae3a5 Add a test to make sure that implicit conversion from error_code to bool will fail
llvm-svn: 292969
2017-01-24 19:44:55 +00:00
Marshall Clow 1ee7bf6313 Update status for LWG2733
llvm-svn: 292967
2017-01-24 19:37:09 +00:00
Marshall Clow 0d1b5ce4f9 Implement LWG2733: [fund.ts.v2] gcd / lcm and bool. We already did tbis for C++17, so replicate the changes in experimental.
llvm-svn: 292962
2017-01-24 18:15:48 +00:00
Marshall Clow 77dd30b557 Mark LWG2736 as complete. No code changes, but we have more tests now
llvm-svn: 292958
2017-01-24 18:03:32 +00:00
Marshall Clow f56e3cdd5d A couple more tests for constexpr stuff in string_view. No changes other than test code.
llvm-svn: 292943
2017-01-24 16:28:02 +00:00
Eric Fiselier 89e41b49f6 Update Linux ABI lists to reflect inlining change in LLVM. More investigation tomorrow.
llvm-svn: 292929
2017-01-24 13:03:40 +00:00
Eric Fiselier f9e7bf3a43 Revert "[libcxx] Never use <cassert> within libc++"
This reverts commit r292883. Unfortunately <string_view> uses
_LIBCPP_ASSERT in a way which is not compatible with the C++11 dylib
build. I'll investigate more tomorrow.

llvm-svn: 292923
2017-01-24 12:26:01 +00:00
Eric Fiselier d591f17aad Revert yet another accidental change caused by r292684
llvm-svn: 292908
2017-01-24 10:38:46 +00:00
Eric Fiselier 5a6e718bd2 Fix bad XFAIL which recent LIT changes diagnosed
llvm-svn: 292905
2017-01-24 10:19:32 +00:00
Eric Fiselier bd23d4daac Remove all usages of REQUIRES-ANY in the test suite.
Pending LIT changes are about to remove the REQUIRES-ANY keyword
in place of supporting boolean && and || within "REQUIRES". This
patch prepares libc++ for that change so that when applied
the bots don't lose their mind.

llvm-svn: 292901
2017-01-24 09:11:08 +00:00
Eric Fiselier d5fd7d7ea1 [libcxx] Never use <cassert> within libc++
Summary:
It is my opinion that libc++ should never use `<cassert>`, including in the `dylib`. This patch remove all uses of `assert` from within libc++ and replaces most of them with `_LIBCPP_ASSERT` instead.

Additionally this patch turn `LIBCXX_ENABLE_ASSERTIONS`  off by default, because the standard library should not be aborting user programs unless explicitly asked to.

Reviewers: mclow.lists, compnerd, smeenai

Reviewed By: mclow.lists

Subscribers: mgorny, cfe-commits

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

llvm-svn: 292883
2017-01-24 04:57:33 +00:00
Eric Fiselier 014d9491ff Manually force the use of __decltype in C++03 with Clang 3.4.
<string> uses `decltype` in a way incompatible with `__typeof__`.
This is problematic when compiling <string> with Clang 3.4 because
even though it provides `__decltype` libc++ still used `__typeof__`
because clang 3.4 doesn't provide __is_identifier which libc++
uses to detect __decltype.

This patch manually detects Clang 3.4 and properly configures
for it.

llvm-svn: 292833
2017-01-23 21:41:13 +00:00
Eric Fiselier 5363be7a9c Fix GCC C++03 build by hiding default template argument in C++03
llvm-svn: 292830
2017-01-23 21:24:58 +00:00
Marshall Clow cddeb751a1 Implement LWG#2778: basic_string_view is missing constexpr.
llvm-svn: 292823
2017-01-23 19:53:28 +00:00
Marshall Clow c68c62c97f Fixed a typo in __config that prevented the aligned new/delete tests from passing on Mac OS.
llvm-svn: 292822
2017-01-23 19:51:54 +00:00
Marshall Clow 7a7d4cdb90 Revert previous cleanup; I got too agressive removing #ifdefs
llvm-svn: 292809
2017-01-23 18:00:15 +00:00
Marshall Clow faebbf7e4d Removed some un-needed ifdefs
llvm-svn: 292806
2017-01-23 17:25:38 +00:00
Eric Fiselier faa0d10b5a Revert accidentally changes which reverted r292582
llvm-svn: 292717
2017-01-21 14:42:44 +00:00
Eric Fiselier d9e1631d23 Fix recent build errors
llvm-svn: 292689
2017-01-21 00:57:29 +00:00
Eric Fiselier f9127593a9 Implement P0513R0 - "Poisoning the Hash"
Summary:
Exactly what the title says.

This patch also adds a `std::hash<nullptr_t>` specialization in C++17, but it was not added by this paper and I can't find the actual paper that adds it.

See http://wg21.link/P0513R0 for more info.

If there are no comments in the next couple of days I'll commit this

Reviewers: mclow.lists, K-ballo, EricWF

Reviewed By: EricWF

Subscribers: cfe-commits

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

llvm-svn: 292684
2017-01-21 00:02:12 +00:00
Eric Fiselier 78bfa04dbe Don't default older GCC's to C++17, but C++14 or C++11 instead
llvm-svn: 292607
2017-01-20 12:54:45 +00:00
Eric Fiselier d30625b1fd Revert "Don't default older GCC's to C++17, but C++14 or C++11 instead"
The commit isn't quite right, and I want to only have to merge one
commit into 4.0

llvm-svn: 292606
2017-01-20 12:52:59 +00:00
Eric Fiselier 2f121b664a Don't default older GCC's to C++17, but C++14 or C++11 instead
llvm-svn: 292605
2017-01-20 12:46:57 +00:00
Eric Fiselier 9114f45ab8 Still expose std::align_val_t in C++17 even if we don't have aligned new/delete.
r292564 disabled the aligned new/delete overloads on platforms without
posix_memalign. Unfortunately that patch also disabled the  align_val_t
definition in C++17 as well.

This patch causes align_val_t to be exposed in C++17 regardless
of if we have the new/delete overloads.

llvm-svn: 292582
2017-01-20 06:27:34 +00:00
Eric Fiselier ccf1813150 Refactor unique_ptr/shared_ptr deleter test types into single header.
llvm-svn: 292577
2017-01-20 04:39:17 +00:00
Eric Fiselier efea04512c Disable aligned new/delete on Apple platforms without posix_memalign
Summary:
This patch disables the aligned new/delet overloads on Apple platforms without `posix_memalign`. This fixes libc++.dylib build regressions on such platforms.
This fixes http://llvm.org/PR31448.

This patch should also be merged into the 4.0 release branch


Reviewers: mclow.lists, rsmith, dexonsmith, jeremyhu

Reviewed By: mclow.lists

Subscribers: cfe-commits

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

llvm-svn: 292564
2017-01-20 01:47:26 +00:00
Eric Fiselier 24a2ebe677 [NFC] Group aligned new/delete definitions together in new.cpp
This patch is cleanup to prepare for future changes

llvm-svn: 292560
2017-01-20 01:13:49 +00:00