Commit Graph

813 Commits

Author SHA1 Message Date
Marshall Clow 6c3f5ffbb8 Implement LWG Issue: 2280. begin/end for arrays should be constexpr and noexcept, plus a drive-by fix for cbegin/cend suggested by Peter Sommerlad.
llvm-svn: 201703
2014-02-19 17:53:30 +00:00
Marshall Clow 9d67c6d5fd Implement LWG2350: min, max, and minmax should be constexpr.
llvm-svn: 201697
2014-02-19 16:51:35 +00:00
Marshall Clow 551365da33 Implement LWG Issue 2346: integral_constant's member functions should be marked noexcept
llvm-svn: 201534
2014-02-17 22:18:51 +00:00
Marshall Clow 53d8b20078 Remove tabs that crept in during an earlier refactoring. No functionality change
llvm-svn: 201472
2014-02-16 01:57:26 +00:00
Yaron Keren 3ef24c4f9a This solves warning C4005: '_NOEXCEPT' : macro redefinition when compiling
with Visual C++ 2013 by making libcxx definition text-identical to yvals.h.

Persumably this definition is for older Visual C++ versions. 
In such cases it will still be defined so no functionality change.

Other platforms should not be affected as this is inside
#elif defined(_LIBCPP_MSVC)

Patch by G M!

llvm-svn: 201328
2014-02-13 14:02:28 +00:00
Marshall Clow 5bd869490b Fix for PR17606 - result_of (and INVOKE) works incorrectly for member function pointers with ref qualifiers. Also a drive-by fix for common_type in C++03 mode. Thanks to Michel Morin for the bug report and the proposed fix.
llvm-svn: 201101
2014-02-10 17:40:28 +00:00
Marshall Clow 74cf6ff5e5 Fix for PR18735 - self-assignment for map/multimap gives incorrect results in C++03
llvm-svn: 201021
2014-02-08 04:03:14 +00:00
Joerg Sonnenberger a0a143690d Avoid signed vs unsigned compare warnings. From Dimitry Andric.
llvm-svn: 200993
2014-02-07 21:14:29 +00:00
Peter Collingbourne 09df4a6675 Support forward_list<Incomplete Type>. Patch by Zhihao Yuan!
llvm-svn: 200814
2014-02-05 01:44:17 +00:00
Logan Chien 22747e621e Remove default function template argument from the header.
GCC will treat the default function template arguments as a
compilation error if C++0x is not enabled.

This commit workaround the compilation error by moving the
SFINAE check to function argument instead of the template
argument.

llvm-svn: 200523
2014-01-31 09:30:46 +00:00
Marshall Clow f246033698 Rename some internal templates to avoid conflict with complier intrinsics. __is_constructible --> __libcpp_is_constructible, __is_nothrow_constructible --> __libcpp_is_nothrow_constructible, and __is_nothrow_assignable --> __libcpp_is_nothrow_assignable. No functionality change.
llvm-svn: 200010
2014-01-24 15:27:41 +00:00
Peter Collingbourne a5adf489b7 Const qualify __mem_fn call operator
QOI improvement.

Differential Revision: http://llvm-reviews.chandlerc.com/D2059

llvm-svn: 199848
2014-01-22 22:56:52 +00:00
Marshall Clow 9aafa898f9 Update __parse_DUP_COUNT and __parse_BACKREF to use the traits class to recognize digits. Fixes PR18514
llvm-svn: 199541
2014-01-18 03:40:03 +00:00
Marshall Clow 354d39cabc Add license headers to a bunch of libc++ files that were missing them. No functionality change. Fixes 18291. Thanks to Nico for the bug report and the patch.
llvm-svn: 199400
2014-01-16 16:58:45 +00:00
Marshall Clow ec931c0721 Rename libc++ internal templates __is_void, __is_integral, __is_floating_point, __is_pointer, __is_function_imp, __is_function, __is_member_function_pointer, __is_member_pointer, __is_signed_impl, __is_signed, __is_unsigned_impl, __is_unsigned to __libcpp_is_XXX, because some compilers have decided that __is_XXX are keywords. No functionality change.
llvm-svn: 199184
2014-01-14 05:13:45 +00:00
Marshall Clow 54f6bd59f5 Fix a bug in regex_token_iterator's copy constructor. Caught by Bob Wilson.
llvm-svn: 199122
2014-01-13 17:47:08 +00:00
Marshall Clow 79b0fee3c6 Fix PR18404 - 'Bug in regex_token_iterator::operator++(int) implementation'. Enhance the tests for regex_token_iterator and regex_iterator.
llvm-svn: 198878
2014-01-09 18:25:57 +00:00
Marshall Clow a429ba738c Back out the <type_traits> changes from r198431; they were breaking when building with glibc. Need to find a better solution for PR18218.
llvm-svn: 198623
2014-01-06 18:12:50 +00:00
Marshall Clow a889636aa0 Removed extra trailing underscore in #ifdef (__GNUC___ --> __GNUC__ )
llvm-svn: 198618
2014-01-06 15:23:02 +00:00
Marshall Clow a3e6e2b286 Rename several internal templates to get rid of ___ (triple underscores) or worse, four. No functionality change.
llvm-svn: 198608
2014-01-06 14:00:09 +00:00
Yaron Keren acb42aefd7 80 cols fixes.
llvm-svn: 198482
2014-01-04 09:27:39 +00:00
Yaron Keren f8f56755e0 Implement the functions: clz, clzl, clzll, ctz, ctzl, and ctzll
for libcxx when compiled with Visual C++ on Win32 and Win64.

clang and gcc (MinGW) compilers provide these implementations themselves.

llvm-svn: 198481
2014-01-04 08:56:00 +00:00
Marshall Clow 0724bf6767 Rename ___make_pair_return to __make_pair_return_impl; ___make_tuple_return to __make_tuple_return_impl; and ____iterator_traits to __iterator_traits_impl. Part of a campaign to remove > 2 underscores from libc++. No functionality change.
llvm-svn: 198457
2014-01-03 22:55:49 +00:00
Marshall Clow d41295da72 Patch by Howard. First part of fix for PR18218; add type traits needed to do the right thing. Fix the problems in PR18218 for isnan and pow - they also need to be applied to the other functions in <cmath>. Also, a drive-by fix for the test - now actually calls test_abs()
llvm-svn: 198431
2014-01-03 18:21:14 +00:00
Marshall Clow ce81aed463 Make cv_status a class enum. Fixes PR18314. Thanks to Andersca for the report and the patch.
llvm-svn: 197921
2013-12-23 22:14:27 +00:00
Yaron Keren 21a697b8b1 Empty line between two unrelated #ifdefs.
llvm-svn: 197810
2013-12-20 13:19:45 +00:00
Logan Chien ca83921ddc GCC does not support strong enum in pre-C++0x mode.
GCC does not support strong enum if -std=c++0x is not used.
Without the strong enum, we will see following error:

  In file included from libcxx/include/ostream:131:0,
                   from libcxx/include/sstream:174,
                   from libcxx/include/complex:247,
                   from cpp03-headers.cpp:11:
  libcxx/include/ios:419:68: error: 'io_errc' is not a class or namespace
  libcxx/include/ios:420:66: error: 'io_errc' is not a class or namespace

To workaround this issue, this commit will define
_LIBCPP_HAS_NO_STRONG_ENUMS when we are compiling with
g++ without c++0x.

llvm-svn: 197313
2013-12-14 06:44:09 +00:00
Marshall Clow c66a611b27 Move std::begin(array) and std::end(array) out from under an #ifdef that was preventing people from building libc++ using gcc. This corrects a mistake that I introduced in r196058
llvm-svn: 197061
2013-12-11 19:32:32 +00:00
Marshall Clow 6bc32ebf35 Refactored a bunch of duplicated code in <ostream>. Made a new routine called __put_character_sequence, and made nine places call it.
llvm-svn: 196951
2013-12-10 19:25:49 +00:00
Marshall Clow 8283ba3704 Refactor some of the operations in <string> so that they can be reused; no functionality change
llvm-svn: 196788
2013-12-09 16:00:28 +00:00
Howard Hinnant 395485efc0 Give all members of exception types default visibility. Lack of this is causing some illegal code relocations rare and hard to reproduce cases.
llvm-svn: 196411
2013-12-04 21:03:23 +00:00
Marshall Clow 3772a46ab4 Fix for PRPR17934; based on a fix suggested by Peter Sommerlad
llvm-svn: 196058
2013-12-02 03:24:33 +00:00
Howard Hinnant 6ef2bb02f5 Remove _LIBCPP_TRIVIAL_PAIR_COPY_CTOR=0 for __APPLE__, no longer needed.
llvm-svn: 195796
2013-11-27 00:53:02 +00:00
Joerg Sonnenberger c55d97b1f9 Don't use T as template argument, it is part of the application
namespace.

llvm-svn: 195693
2013-11-25 22:44:20 +00:00
Yaron Keren e050d66e12 Compiling libcxx with gcc 4.6.4 (MingW) produces these errors:
type_traits:3280:31: error: expected primary-expression before 'decltype'
 type_traits:3280:29: error: expected ';' at end of member declaration

 memory:2415:49: error: function 'std::__1::default_delete<_Tp>::default_delete()'
 defaulted on its first declaration must not have an exception-specification

 memory:2435:49: error: function 'std::__1::default_delete<_Tp []>::default_delete()'
 defaulted on its first declaration must not have an exception-specification

The attached patch defines _LIBCPP_HAS_NO_ADVANCED_SFINAE and 
_LIBCPP_HAS_NO_DEFAULTED_FUNCTIONS for gcc version < 4.7, making
the library compile with gcc 4.6.4.

llvm-svn: 195431
2013-11-22 09:22:12 +00:00
Marshall Clow 028875aa7c Patch by Xing Xue to improve libc++ support for AIX
llvm-svn: 195144
2013-11-19 19:16:03 +00:00
Marshall Clow 7e1ea8d288 Patch by Bruce Mitchener. Change all references to EMSCRIPTEN to __EMSCRIPTEN__. If you're not using the PP symbol EMSCRIPTEN, then you should see no functionality change.
llvm-svn: 195136
2013-11-19 18:05:03 +00:00
Yaron Keren fbeb63c0d1 This patch implements snprintf_l function in a way similar to the other
functions in src/support/win32/locale_win32.cpp and locale_win32.h, 
calling upon vsnprintf for which there is a MingW correct alternative.

Note! __USE_MINGW_ANSI_STDIO is not modified in this patch. In order to 
use the __mingw version it must be defined before including the MingW 
headers.

llvm-svn: 195044
2013-11-18 21:12:14 +00:00
Yaron Keren c0299d7f53 Fix-it suggestion for fixing min or max defines on Windows.
llvm-svn: 194891
2013-11-15 23:41:01 +00:00
Yaron Keren 6e72b8ba8c Windows.h is not required.
llvm-svn: 194870
2013-11-15 22:54:15 +00:00
Marshall Clow dfdac03c8f Move <optional> into include/experimental, and into the std::experimental namespace, since it's not part of C++14, but of an upcoming TS
llvm-svn: 194867
2013-11-15 22:42:10 +00:00
Justin Bogner fd6cfe92d3 Add the CMakeLists.txt that was missed in r194825
llvm-svn: 194838
2013-11-15 18:34:43 +00:00
Howard Hinnant f9fd0d6d11 This is a followup to r194536, which changed the pair copy constructor to be
trivial in C++03, thus making it trivial in both C++03 and C++11.

This patch allows one to opt-in/out of this decision with a macro.  You can
choose to have the pair copy constructor always be trivial, or always be
non-trivial.  The flag controlling this is now _LIBCPP_TRIVIAL_PAIR_COPY_CTOR.

The client can define this flag to 1, and the pair copy constructor will be
trivial (when possible of course), or to 0, and the pair copy constructor will
be nontrivial.

Default settings for this flag are set in <__config> (as usual).  With this
commit the default is _LIBCPP_TRIVIAL_PAIR_COPY_CTOR=1 for all platforms
except __APPLE__, which defaults to _LIBCPP_TRIVIAL_PAIR_COPY_CTOR=0.

llvm-svn: 194742
2013-11-14 22:52:25 +00:00
Marshall Clow 513ecaba91 Fixed bug in quoted strings implementation. Added test to be sure. Thanks to Peter Sommerlad for the report (and suggested fix)
llvm-svn: 194725
2013-11-14 20:01:38 +00:00
Marshall Clow 21fee96f69 Move <dynarray> into include/experimental, and into the std::experimental namespace, since it's not part of C++14, but of an upcoming TS
llvm-svn: 194614
2013-11-13 22:44:48 +00:00
Howard Hinnant ccad8c32e0 This fixes a very subtle ABI problem concerning the copy constructor of
pair, and a couple of pair-like implementation detail types.  The
C++98/03 and 11 standards all specify that the copy constructor of
pair<int, int> is trivial. However as libc++ tracked the draft C++11
standard over the years, this copy constructor became non-trivial, and
then just recently was corrected back to trivial for C++11.

Unfortunately (for libc++1) the Itanium ABI specifies different calling
conventions for trivial and non-trivial copy constructors.  Therefore
currently the C++03 libc++ copy constructor for pair<int, int> is ABI
incompatible with the C++11 libc++ copy constructor for pair<int, int>.
This is Bad(tm).   This patch corrects the situation by making this copy
constructor trivial in C++03 mode as well.

Just in case it is needed for an incomplete C++11 compiler, libc++
retains the ability to support pair with rvalue references, but without
defaulted special members.  However the pair needs non-trivial special
members to implement this special case, (as it did when clang was in
this place a couple of years ago).

During this work a bug was also found and fixed in
is_trivially_constructible.

And there is a minor drive-by fix in <__config> regarding
__type_visibility__.

A test is updated to ensure that the copy constructor of pair<int, int>
is trivial in both C++03 and C++11.  This test will necessarily fail for
a compiler that implements rvalue references but not defaulted special
members.

llvm-svn: 194536
2013-11-13 00:39:22 +00:00
Howard Hinnant 88960d151e Tell libc++abi whether or not libc++ has declared bad_array_length.
llvm-svn: 194207
2013-11-07 17:15:51 +00:00
Marshall Clow 57b8f44c87 More duplicate code removal in <locale>. Hoist common parsing code into two templates: num_get::__do_get_signed and num_get::__do_get_unsigned, and make the do_get routines call them. No functionality change.
llvm-svn: 194185
2013-11-07 01:00:50 +00:00
Howard Hinnant 4478b25ade Fix several tuple bugs that were exposed by clang's implementation of CWG 1402. This fixes http://llvm.org/bugs/show_bug.cgi?id=17798.
llvm-svn: 194154
2013-11-06 17:45:43 +00:00
Marshall Clow e427322327 Fix an off-by-one error in basic_string::__grow_by, where it would incorrectly throw length_error (instead of bad_alloc) when attempting to resize the string to 'max_size()'. Add tests for resizing to max_size +/-1
llvm-svn: 194151
2013-11-06 14:24:38 +00:00