Commit Graph

3468 Commits

Author SHA1 Message Date
Saleem Abdulrasool
4ed4bca5f3 chrono: address post-commit comments from majnemer
Correct style to match libc++ style as pointed out by David Majnemer on
IRC.  NFC.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290805 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-01 22:04:36 +00:00
Saleem Abdulrasool
75748cde64 chrono: give Windows a steady_clock
Provide a definition for a steady monotonic clock by wrapping
QueryPerformanceCounter.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290804 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-01 20:20:43 +00:00
Saleem Abdulrasool
67372ee77e chrono: implement a Windows version of system_clock::now
system_clock::now is not entirely straight forward on Windows, which
does not have a clock_gettime function.

GetSystemTimeAsFileTime gives us the value relative to the NT epoch (Jan
1 1601) rather than the Unix epoch (Jan 1 1970).  However, this function
has a low resolution (~10ms).  Newer versions of Windows provide
GetSystemTimePreciseAsFileTime which gives us a much more accurate time
(<1us).  Unfortunately, the latter is only available on Windows 8+ when
targeting desktop apps.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290803 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-01 20:20:41 +00:00
Saleem Abdulrasool
1ca3c45316 build: further improve flags handling for cl
This allows us to build with cl (or rather clang-cl) by using the
correct spelling for `-include` (`/FI` for cl).  clang-cl and cl default
to C++11/C++14 as they support it rather than permitting an explicit
language standard.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290802 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-01 20:20:40 +00:00
Saleem Abdulrasool
cfe109bf3d build: dont detect libraries for Windows
Hard code the defaults for Windows for the time being.  The checks
really are always going to return the same value.  Technically, the
pthread linkage is possible, however, it seems better to use the Win32
threading along with the external threading support that we have added.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290801 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-01 20:20:38 +00:00
Saleem Abdulrasool
63de5d2a7f build: differentiate between building for and on Windows
This is necessary to support cross-compiling a Windows libc++ from
Linux.  The CMAKE_SYSTEM_HOST_NAME tells you what, in autotools
parlance, is known as the build as opposed to WIN32 which maps to, in
autotools parlance, host.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290800 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-01 20:20:36 +00:00
Saleem Abdulrasool
f7e84953a5 system_error: use strerror_r only for threaded code
When building libc++ without threading, strerror_r is not used.  Define
the code only when threading is enabled.  This allows us to build
system_error for Windows, which ATM doesn't build with threading.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290791 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-31 21:24:04 +00:00
Saleem Abdulrasool
5334ba7494 clean up some qualifier casting
This cleans up the `-Wqual-cast` warnings from gcc 6 when building
libc++.  NFC.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290789 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-31 18:13:34 +00:00
Saleem Abdulrasool
c6aee64c5d remove some inherited attributes on exceptions
These exception types are marked with `_LIBCPP_EXCEPTION_ABI` which
expands to `__attribute__((__visibility__("default")))` or
`__declspec(dllexport)`.  When building for Windows, we would hit an
error:

    cannot apply 'dllexport' to a 'dllexport' class

Remove the duplicate annotations as they will be inherited from the
class.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290785 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-31 17:34:26 +00:00
Saleem Abdulrasool
04674ef99b random: include __config before building
We need to include __config to ensure that we know what random
implementation is being used.  Fixes compilation for Windows.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290775 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-31 00:00:21 +00:00
Sebastian Pop
51dfbbc517 improve performance of string::find
string::find used to call the generic algorithm ::find.  The patch special
case string::find such that it ultimately gets converted to calls to memchr
and memcmp.

The patch improves the performance of the string::find routine by about 20x.

Without the patch, the performance on an x86_64-linux 3400 MHz machine is:

Benchmark                           Time           CPU Iterations
-----------------------------------------------------------------
BM_StringFindNoMatch/10             4 ns          4 ns  166421326
BM_StringFindNoMatch/64            37 ns         37 ns   18754392
BM_StringFindNoMatch/512          268 ns        268 ns    2586060
BM_StringFindNoMatch/4k          2143 ns       2144 ns     328342
BM_StringFindNoMatch/32k        16910 ns      16917 ns      40623
BM_StringFindNoMatch/128k       67577 ns      67602 ns      10138
BM_StringFindAllMatch/1             3 ns          3 ns  265163471
BM_StringFindAllMatch/8             6 ns          6 ns  112582467
BM_StringFindAllMatch/64           36 ns         36 ns   19566457
BM_StringFindAllMatch/512         209 ns        209 ns    3318893
BM_StringFindAllMatch/4k         1618 ns       1618 ns     432963
BM_StringFindAllMatch/32k       12909 ns      12914 ns      54317
BM_StringFindAllMatch/128k      48342 ns      48361 ns      13922
BM_StringFindMatch1/1           33777 ns      33790 ns      20698
BM_StringFindMatch1/8           33940 ns      33953 ns      20619
BM_StringFindMatch1/64          34038 ns      34051 ns      20571
BM_StringFindMatch1/512         34217 ns      34230 ns      20480
BM_StringFindMatch1/4k          35510 ns      35524 ns      19752
BM_StringFindMatch1/32k         46438 ns      46456 ns      15030
BM_StringFindMatch2/1           33839 ns      33852 ns      20648
BM_StringFindMatch2/8           33950 ns      33963 ns      20594
BM_StringFindMatch2/64          33846 ns      33859 ns      20668
BM_StringFindMatch2/512         34023 ns      34036 ns      20279
BM_StringFindMatch2/4k          35422 ns      35436 ns      19716
BM_StringFindMatch2/32k         46570 ns      46588 ns      15027

With the patch applied

Benchmark                           Time           CPU Iterations
-----------------------------------------------------------------
BM_StringFindNoMatch/10             5 ns          5 ns  133724346
BM_StringFindNoMatch/64             6 ns          6 ns  119312184
BM_StringFindNoMatch/512           13 ns         13 ns   51539628
BM_StringFindNoMatch/4k            77 ns         77 ns    8935934
BM_StringFindNoMatch/32k          551 ns        551 ns    1222808
BM_StringFindNoMatch/128k        2684 ns       2685 ns     259957
BM_StringFindAllMatch/1             7 ns          7 ns   98017959
BM_StringFindAllMatch/8             7 ns          7 ns   91466911
BM_StringFindAllMatch/64            8 ns          8 ns   85707392
BM_StringFindAllMatch/512          20 ns         20 ns   34490895
BM_StringFindAllMatch/4k           93 ns         93 ns    7360375
BM_StringFindAllMatch/32k         827 ns        828 ns     829944
BM_StringFindAllMatch/128k       3593 ns       3594 ns     195815
BM_StringFindMatch1/1            1332 ns       1332 ns     516354
BM_StringFindMatch1/8            1336 ns       1336 ns     495876
BM_StringFindMatch1/64           1338 ns       1339 ns     516656
BM_StringFindMatch1/512          1357 ns       1357 ns     510717
BM_StringFindMatch1/4k           1485 ns       1486 ns     461228
BM_StringFindMatch1/32k          2235 ns       2236 ns     318253
BM_StringFindMatch2/1            1335 ns       1335 ns     517105
BM_StringFindMatch2/8            1336 ns       1337 ns     518004
BM_StringFindMatch2/64           1344 ns       1345 ns     511751
BM_StringFindMatch2/512          1361 ns       1361 ns     508150
BM_StringFindMatch2/4k           1611 ns       1611 ns     463388
BM_StringFindMatch2/32k          2187 ns       2187 ns     317532

Patch written by Aditya Kumar and Sebastian Pop.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290761 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 18:01:36 +00:00
Marshall Clow
4797c1151d Fix some 'FIXME's in the tests.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290758 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 17:42:11 +00:00
Eric Fiselier
bc06f26c7f Recommit r290750: Fix PR19460 - std::ios is convertible to int.
There were two problems with the initial fix.

1. The added tests flushed out that we misconfigured _LIBCPP_EXPLICIT with GCC.

2. Because the boolean type was a member function template it caused weird link
   errors. I'm assuming due to the vague linkage rules. This time the bool type
   is a non-template member function pointer. That seems to have fixed the
   failing tests. Plus it will end up generating less symbols overall, since
   the bool type is no longer per instantiation.

original commit message below
-----------------------------

std::basic_ios has an operator bool(). In C++11 and later
it is explicit, and only allows contextual implicit conversions.

However explicit isn't available in C++03 which causes std::istream (et al)
to have an implicit conversion to int. This can easily cause ambiguities
when calling operator<< and operator>>.

This patch uses a "bool-like" type in C++03 to work around this. The
"bool-like" type is an arbitrary pointer to member function type. It
will not convert to either int or void*, but will convert to bool.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290754 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 14:05:52 +00:00
Eric Fiselier
6ce93e5bd4 Revert r290750 - Fix PR19460 - std::ios is convertible to int.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290752 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 13:11:17 +00:00
Eric Fiselier
01153d5a73 Add missing include in test.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290751 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 12:45:30 +00:00
Eric Fiselier
687c0bbee4 Fix PR19460 - std::ios is convertible to int.
std::basic_ios has an operator bool(). In C++11 and later
it is explicit, and only allows contextual implicit conversions.

However explicit isn't available in C++03 which causes std::istream (et al)
to have an implicit conversion to int. This can easily cause ambiguities
when calling operator<< and operator>>.

This patch uses a "bool-like" type in C++03 to work around this. The
"bool-like" type is an arbitrary pointer to member function type. It
will not convert to either int or void*, but will convert to bool.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290750 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 12:44:58 +00:00
Ed Schouten
1e17bc1faf Remove mblen(), mbtowc() and wctomb() from the thread-unsafe functions.
Back in r240527 I added a knob to prevent thread-unsafe functions from
being exposed. mblen(), mbtowc() and wctomb() were also added to this
list, as the latest issue of POSIX doesn't require these functions to be
thread-safe.

It turns out that the only circumstance in which these functions are not
thread-safe is in case they are used in combination with state-dependent
character sets (e.g., Shift-JIS). According to Austin Group Bug 708,
these character sets "[...] are mostly a relic of the past and which
were never supported on most POSIX systems".

Though in many cases the use of these functions can be prevented by
using the reentrant counterparts, they are the only functions that allow
you to query whether the locale's character set is state-dependent. This
means that omitting these functions removes actual functionality.

Let's be a bit less pedantic and drop the guards around these functions.

Links:
http://austingroupbugs.net/view.php?id=708
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2037.htm

Reviewed by:	ericwf
Differential Revision:	https://reviews.llvm.org/D21436


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290748 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 10:44:00 +00:00
Eric Fiselier
8673c52ffe Get ctype_byname tests passing on Linux.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290746 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 09:28:58 +00:00
Eric Fiselier
9f988e6e4e Update "Making Optional Greater Equal Again" paper status
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290742 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-30 04:16:30 +00:00
Eric Fiselier
ae3128f268 Fix build using the buildit script
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290727 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-29 22:42:45 +00:00
Eric Fiselier
152e5e61a1 Fix PR31489 - std::function self-swap segfaults
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290721 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-29 20:03:55 +00:00
Eric Fiselier
7d0000f737 Fix typo in comment
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290666 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 11:09:18 +00:00
Eric Fiselier
8a549abae1 Fix ABI incompatible C++03 nullptr_t
In C++03 libc++ emulates nullptr_t using a class, and #define's nullptr.
However this makes nullptr_t mangle differently between C++03 and C++11.
This breaks any function ABI which takes nullptr_t.

Thanfully Clang provides __nullptr in all dialects. This patch adds
an ABI option to switch to using __nullptr in C++03. In a perfect world
I would like to turn this on by default, since it's just ABI breaking fix
to an ABI breaking bug.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290662 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 09:50:23 +00:00
Eric Fiselier
ce34512d2f Remove dead debug_mode doc link
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290659 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 06:21:09 +00:00
Eric Fiselier
32eebb71f7 Ensure <__debug> gets the nullptr definition in C++03
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290658 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 06:15:01 +00:00
Eric Fiselier
fb342388df Fix debug mode for vector/list and cleanup tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290657 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 06:06:09 +00:00
Eric Fiselier
72a67ff116 Fix stupid build error caused by a stupid person
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290656 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 05:56:16 +00:00
Eric Fiselier
47257c4a7d Add tests for unordered container tests and std::string
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290655 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 05:53:01 +00:00
Eric Fiselier
2c8aa056f4 Fix __wrap_iter in debug mode and apply _NOEXCEPT_DEBUG to it
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290654 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 05:35:32 +00:00
Eric Fiselier
fa31c108f0 Fix build errors in C++03 caused by recent debug changes
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290653 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 05:26:56 +00:00
Eric Fiselier
51d64bbc8c Fix debug mode build w/o exceptions
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290652 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 05:20:27 +00:00
Eric Fiselier
01eb99ac7b Implement a throwing version of _LIBCPP_ASSERT.
This patch implements changes to allow _LIBCPP_ASSERT to throw on failure
instead of aborting. The main changes needed to do this are:

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

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

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

Additionally this patch rewrites the documentation for debug mode.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290651 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-28 04:58:52 +00:00
Eric Fiselier
046a71be67 Implement P0435R1 - Resolving LWG issues for common_type
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290627 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-27 21:16:48 +00:00
Eric Fiselier
3010df98f9 Fix PR31481 - 3+ parameter common_type isn't SFINAE friendly
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290624 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-27 19:59:50 +00:00
Shoaib Meenai
833ad542b5 [libc++] Make __num_get_float hidden
It's an internal function and shouldn't be exported. It's also a source
of discrepancy in the published ABI list; these symbols aren't exported
for me on CentOS 7 or Ubuntu 16.04, leading to spurious check-cxx-abilist
failures.

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

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290503 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 18:05:32 +00:00
Marshall Clow
99447c8e03 Fix bug #31387 - not checking end iterator when parsing decimal escape. Thanks to Karen for the report.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290500 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 17:21:03 +00:00
Eric Fiselier
ab9ab94102 Enable -Wunreachable-code and fix duplicate warning flags
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290486 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 04:34:33 +00:00
Eric Fiselier
e32aed8014 Fix ASAN test failure
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290482 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 03:27:52 +00:00
Eric Fiselier
3414afa415 Fix -Wsign-compare warnings in re tests that only run on OS X
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290481 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 03:20:53 +00:00
Eric Fiselier
68e3ccbecd Fix sign-compare warnings on ARM platforms caused by wchar_t being unsigned
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290480 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 03:09:00 +00:00
Eric Fiselier
2ab8f62c6f Avoid unused warning in __throw_future_error w/o exceptions enabled
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290479 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 01:56:25 +00:00
Eric Fiselier
f62eee4fe7 Fix warning caused by platforms providing a signed wint_t
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290477 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 01:43:54 +00:00
Eric Fiselier
f47536798d Fix yet another missed -Wunused warning. Hopefully this is the last one
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290476 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 01:29:27 +00:00
Eric Fiselier
10dd69eaf1 Fix unused warning which only triggers in C++11
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290475 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 01:12:28 +00:00
Eric Fiselier
e9784032ce fix warnings only produced by apple-clang
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290474 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 01:07:54 +00:00
Eric Fiselier
9d2fd1f556 Fix missed sign-compare warning
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290473 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 00:44:20 +00:00
Eric Fiselier
0a1cbcf2b7 fix newly failing c++03 tests
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290472 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 00:40:45 +00:00
Eric Fiselier
3678f7d6ee Fix another unused warning
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290470 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 00:28:19 +00:00
Eric Fiselier
50f6579e74 fix sign comparison warnings
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290469 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-24 00:24:44 +00:00
Eric Fiselier
0e5ebbc77c Fix unused parameters and variables
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290459 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-23 23:37:52 +00:00